如何在 ember-data 1.13 中使用 jsonapi 分页

How to use jsonapi pagination with ember-data 1.13

目前是否有可能使用 ember-data 1.13 的分页?

我在顶级 links 对象中有一个 jsonapi.orgnext link 兼容的 API。如何让我的 store/response 数组加载此页面?

我想做的是:

actions: {
  loadMore() {
    this.get('model').loadNextPage().then((data) => {
      this.set('model', data);
    });
  }
}

谢谢

分页即将推出https://github.com/emberjs/data/issues/2905

为了临时修复,我重新编写了我的服务器逻辑,以便我的分页链接在 meta 键而不是 links 键中返回。这样我就可以利用 JSONAPISerializer 中已经存在的 extractMeta 方法。不是最好的解决方案,但我认为在我可以实施官方方式之前它会阻止我。

我的客户端破解工作:

我重写了适配器上的 ajaxOptions 以便可以使用 store.find('model', { loadNext: '/loadMoarLink' }):

直接访问 URL
ajaxOptions(url, type, options) {
    if(options && options.data && options.data.loadNext) {
        url = options.data.loadNext;
        delete options.data.loadNext
    }
    return this._super(url, type, options);
}

为了访问链接,我重写了适配器上的 normalizeResponse 以在元对象上写入链接:

normalizeResponse: function(store, primaryModelClass, payload, id, requestType) {
    let links = payload.links;
    let response = this._super(...arguments);
    if(!get(response, 'meta')) {
        set(response, 'meta', Ember.Object.create());
    }
    set(response, 'meta.links', links);
    return response;
}

然后我可以从 setupController:

访问元数据
controller.set('meta', Ember.copy(this.store.metadataFor('model'), true));

并且始终查询 next 数据:

this.store.query('model', {
  loadNext: this.get('controller.meta.links.next')
})