Backbone使用回调游标获取数据

时间:2013-07-06 04:53:06

标签: ajax backbone.js recursion

我如何使用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来继续获取,直到响应不包含游标。它应该继续添加页面模型,但不能替换和覆盖它们。它需要做类似上面的例子,虽然我不确定实现它的最佳方法。

2 个答案:

答案 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指出的结果非常重要。