如何在 ember-data 1.13 中使用 jsonapi 分页
How to use jsonapi pagination with ember-data 1.13
目前是否有可能使用 ember-data 1.13
的分页?
我在顶级 links
对象中有一个 jsonapi.org
与 next
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')
})
目前是否有可能使用 ember-data 1.13
的分页?
我在顶级 links
对象中有一个 jsonapi.org
与 next
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' })
:
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')
})