3

現時点でページネーションを使用する可能性はありますember-data 1.13か?

最上位オブジェクトにリンクがあるjsonapi.org互換性のある API があります。このページをロードするようにストア/応答配列に指示するにはどうすればよいですか?nextlinks

私がやりたいことは次のようなものです:

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

ありがとう

4

2 に答える 2

3

私の作業中のクライアント側のハック:

アダプターで ajaxOptions をオーバーライドして、URL に直接アクセスできるようにします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')
})
于 2015-09-08T10:22:15.207 に答える
0

ページネーションは近日公開予定ですhttps://github.com/emberjs/data/issues/2905 .

meta一時的な修正として、ページネーション リンクが 1 つではなくキーで返されるように、サーバー ロジックを修正しましたlinks。そうすれば、 にextractMeta既に存在するメソッドを利用できJSONAPISerializerます。最善の解決策ではありませんが、公式の方法を実装できるようになるまで、それは私を引き留めると思います。

于 2015-09-04T20:16:03.993 に答える