如何使用jsonapi分页与ember-data 1.13

时间:2015-09-01 16:33:48

标签: ember-data json-api

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

我有一个jsonapi.org兼容的API,顶层next对象中有links个链接。如何告诉我的商店/响应数组加载此页面?

我想做的事情是:

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

由于

2 个答案:

答案 0 :(得分:3)

我的工作客户端黑客攻击:

我覆盖适配器上的ajaxOptions,以便可以直接访问store.find('model', { loadNext: '/loadMoarLink' })的网址:

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

答案 1 :(得分:0)

分页即将到来https://github.com/emberjs/data/issues/2905

对于临时修复,我重新编写了服务器逻辑,以便在meta密钥而不是links密钥中返回我的分页链接。这样我就可以使用extractMeta中已存在的JSONAPISerializer方法。不是最好的解决方案,但我认为它会阻止我,直到我能够实施正式的方式。