Как использовать пагинацию jsonapi с ember-data 1.13

Есть ли возможность на данный момент использовать пагинацию с ember-data 1.13?

У меня есть jsonapi.org совместимый API со ссылкой next в объекте links верхнего уровня. Как я могу сообщить моему массиву магазина/ответа, чтобы он загружал эту страницу?

Я хочу сделать что-то вроде:

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

Спасибо


person Lux    schedule 01.09.2015    source источник


Ответы (2)


Мой рабочий взлом на стороне клиента:

Я переопределяю 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')
})
person Lux    schedule 08.09.2015
comment
У вас есть репозиторий или JSBin для этого? Я хотел бы попробовать ваше решение, но у меня есть несколько проблем в ember-cli. Меня шокирует, сколько обходных путей требуется для доступа к информации, которая полностью является частью стандарта jsonapi. - person allthesignals; 10.09.2015
comment
Это именно то, что нам нужно сделать... пока мы не получим сахар Ember Data для доступа к ссылкам. Если это чем-то поможет, вот руководство, которое я написал для Ember 2.3, включая бэкэнд Rails 5 с Kaminari: emberigniter.com/pagination-in-ember-with-json-api-backend - person Frank Treacy; 01.03.2016

Пагинация скоро появится https://github.com/emberjs/data/issues/2905 .

Для временного исправления я переделал логику своего сервера, чтобы мои ссылки на страницы возвращались в ключе meta вместо links. Таким образом, я мог использовать метод extractMeta, уже присутствующий в файле JSONAPISerializer. Не лучшее решение, но я думаю, что оно задержит меня, пока я не смогу реализовать официальный способ.

person shicholas    schedule 04.09.2015
comment
Ну, смена сервера для меня не вариант. - person Lux; 08.09.2015
comment
справедливо, мне нравится ваше решение - person shicholas; 09.09.2015