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

Get Multiple pages of data at once with Backbone Collection

本文关键字:获取 一次 数据 Backbone Collection 使用      更新时间:2023-09-26

我有这个Collection mixin,我正在使用它来尝试继续将多页数据一起拉入集合,但我认为当它检测到传入fetch的新选项时,它会重置自己,因为我只会得到最后一页数据。

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);
  }
};

我想你从中了解了我要做的事情的要点,有什么想法可以做吗?

想清楚了,你需要添加选项来告诉集合不要删除,而只添加/更新。。。

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);
  }
};