使用Backbone Collection一次获取多页数据

时间:2014-09-21 00:25:46

标签: javascript backbone.js pagination backbone-collections

我有这个Collection mixin,我试图继续将多页数据拉入一起,但我认为它会在检测到传入的新选项时自行重置我只是以最后一页数据结束。

var Pageable = {
  fetch: function(options) {
    var originalSuccess = options.success;
    options.data.page = 1;

    var doFetch = function(options) {
      var beforeLength = this.length;

      options.data = _.extend({page: options.data.page, per_page:100}, options.data);
      options.success = function(col, res, opts) {
        if (this.length === beforeLength) return originalSuccess(col, res, opts);
        options.data.page++;
        doFetch(options);
      }.bind(this);

      return Collection.prototype.fetch.call(this, options);
    }.bind(this);

    return doFetch(options);
  }
};

我想从中你可以得到我想要做的事情的要点,关于如何去做的任何想法?

1 个答案:

答案 0 :(得分:0)

想出来,你需要添加选项来告诉集合不要删除,但只需添加/更新......

var Pageable = {
  fetch: function(options) {
    var originalSuccess = options.success;

    _.extend(options, {
      add: true,           // <----
      remove: false,       // <----
      update: true,        // <----
      data: {
        page: 1,
        per_page:100
      }
    });

    var doFetch = function(options) {
      var beforeLength = this.length;

      options.success = function(col, res, opts) {
        console.log(this.length, beforeLength);
        if (this.length === beforeLength) return originalSuccess(col, res, opts);
        options.data.page++;
        doFetch(options);
      }.bind(this);

      return Collection.prototype.fetch.call(this, options);
    }.bind(this);

    return doFetch(options);
  }
};