【问题标题】:How to use jsonapi pagination with ember-data 1.13如何在 ember-data 1.13 中使用 jsonapi 分页
【发布时间】:2015-11-26 23:47:09
【问题描述】:

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

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

我想做的是这样的:

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

谢谢

【问题讨论】:

    标签: ember-data json-api


    【解决方案1】:

    我的工作客户端破解:

    我覆盖了适配器上的 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')
    })
    

    【讨论】:

    • 你有存储库或 JSBin 吗?我很想尝试您的解决方案,但我在 ember-cli 中遇到了一些问题。让我感到震惊的是,要访问完全属于 jsonapi 标准的信息需要多少变通方法。
    • 这正是我们需要做的......直到我们得到 Ember Data “糖”来访问链接。如果这有所帮助,这里是我为 Ember 2.3 编写的指南,包括带有 Kaminari 的 Rails 5 后端:emberigniter.com/pagination-in-ember-with-json-api-backend
    【解决方案2】:

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

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

    【讨论】:

    • 好吧,改变服务器不是我的选择。
    • 很公平,我喜欢你的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多