Ajax 主干使用回调游标获取数据
如何使用Backbones fetch处理包含游标的回调结果?我将使用这个简单的例子,一本获取页面的书Ajax 主干使用回调游标获取数据,ajax,backbone.js,recursion,Ajax,Backbone.js,Recursion,如何使用Backbones fetch处理包含游标的回调结果?我将使用这个简单的例子,一本获取页面的书 var Book = Backbone.Collection.extend({ model: Page, recursiveFetch: function(cursor) { this.fetch({ url: 'book/pages', data: { cursor: {cur
var Book = Backbone.Collection.extend({
model: Page,
recursiveFetch: function(cursor) {
this.fetch({
url: 'book/pages',
data: {
cursor: {cursor here};
},
success: function(response) {
if (response.cursor) {
this.recursiveFetch(response.cursor);
}
}
});
}
})
我需要能够使用fetch来保持抓取,直到响应不包含游标。它应该不断添加页面模型,而不是替换和覆盖它们。它需要像上面的例子那样做,尽管我不确定实现它的最佳方法。我认为您所需要做的就是将
{remove:false}
添加到fetch选项中。还值得一提的是,success函数的此
上下文可能不是集合,因此您可能希望将其作为参数传递到success函数中。最终结果将是:
recursiveFetch: function(cursor) {
this.fetch({
remove:false, // prevents removal of existing models
url: 'book/pages',
success: function(collection, response) {
if (response.cursor) {
collection.recursiveFetch(response.cursor);
}
}
});
}
解决方法非常简单:仅当参数存在时才将光标添加到参数中。在其他情况下(即第一次),使用其余参数发出正常请求
var CursorCollection = Backbone.Collection.extend({
fetchAll: function(cursor) {
var params = {
// if you have some other request parameters...
};
// if we have a cursor from the previous call, add it to the parameters
if (cursor) { params.cursor = cursor; }
this.fetch({
remove: false,
data: params,
success: function(collection, response) {
if (response.cursor) {
return collection.fetchAll(response.cursor);
}
}
});
}
});
然后,当您第一次调用它collection.fetchAll()
时,它就会递归,直到它得到一个没有光标的响应为止
请注意,
remove:false
参数对于@dcarson指出的累积结果非常重要。您的意思是集合将多次从url书籍/页面获取页面,直到响应不包含光标为止?或者集合只请求一次,您必须检查页面并将页面添加到集合中,直到它不包含游标?它将继续获取,直到响应不包含游标。最后,我在解析方法if(!data.cursor)this.unset('cursor')中使用了它“代码>如果光标没有设置在对象上,就不要让它再次调用catch。@Josh我想这个问题已经被遗忘很久了,但我只是在破解vocab编辑器时发现了它,我有了一个解决方案。”。我应该把答案贴出来吗?@laugedelic很有趣,你碰到了这个帖子。我想我们也想出了一些更聪明的方法来处理它。但是请随意为其他可能偶然发现它的人发布您的解决方案。我尝试添加remove:false
位,它将移动到第二个光标。之后,它将在调用同一个游标时执行无限循环。我需要了解有关游标的更多信息,以进一步提供帮助。通常还有另一个参数表示您在最后一页,它与告诉您下一页要检索的页面的参数是分开的。但这只是目前的猜测对不起,不,没有其他参数来决定最后一页。如果有光标,则有更多数据,如果没有,则应停止提取。光标看起来类似于12910298.134,将在将其作为提取参数传回时递增。简单问一下,您使用光标
参数做什么?它已传入,但似乎并未全部使用。您不需要将其作为URL查询参数传递吗?您是对的。我更新了示例以传递包括光标在内的数据。