2

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

4

2 回答 2

1

我认为您需要做的就是将 a 添加{remove: false} 到您的获取选项中。还值得一提的是this,您的成功函数的上下文可能不是集合,因此您可能希望将其作为参数传递给成功函数。最终结果将是:

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);
           }
        }
    });
}
于 2013-07-07T03:01:58.857 回答
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 指出的结果非常重要。

于 2017-02-26T02:06:57.050 回答