我如何使用Backbones fetch来处理包含游标的回调结果?我将使用这个提取页面的书的简单示例。
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来继续获取,直到响应不包含游标。它应该继续添加页面模型,但不能替换和覆盖它们。它需要做类似上面的例子,虽然我不确定实现它的最佳方法。
答案 0 :(得分:1)
我认为你需要做的就是在你的获取选项中添加{remove: false}
。还值得一提的是,成功函数的this
上下文可能不是集合,因此您可能希望将其作为参数传递给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);
}
}
});
}
答案 1 :(得分:0)
修复非常简单:仅在参数出现时才将光标添加到参数中。在其他情况下(即第一次)使用其余参数发出正常请求。
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指出的结果非常重要。