Правильный шаблон для возврата данных разбиения на страницы с помощью RESTAdapter данных ember-data? - программирование
Подтвердить что ты не робот

Правильный шаблон для возврата данных разбиения на страницы с помощью RESTAdapter данных ember-data?

Я показываю список статей на странице, которые извлекаются с помощью Embed Data RESTAdapter. Мне нужно реализовать bootstrap'esque paginator (см.: http://twitter.github.com/bootstrap/components.html#pagination) и не может найти разумный шаблон для возврата данных разбивки на страницы, таких как число страниц, количество статей, текущей страницы, в рамках одного запроса.

Например, я бы хотел, чтобы API возвращал что-то вроде:

{
  articles: [{...}, {...}],
  page: 3,
  article_count: 4525,
  per_page: 20
}

Одна из идей заключалась в том, чтобы добавить App.Paginator DS.Model, чтобы ответ мог выглядеть так:

{
  articles: [{...}, {...}],
  paginator: {
    page: 3,
    article_count: 4525,
    per_page: 20
  }
}

Но это кажется излишним, чтобы взломать что-то настолько тривиальное. Кто-нибудь решил эту проблему или нашел конкретный образец, который им нравится? Есть ли простой способ управления сопоставлениями RESTAdapter для учета таких сценариев, как это?

4b9b3361

Ответ 1

Попробуйте использовать Ember Pagination Support Mixin и предоставить собственную реализацию следующего метода. Вместо загрузки всего содержимого вы можете получить требуемый контент, когда пользователь перемещает страницы. Все, что вам нужно, это общая учетная запись ваших записей.

didRequestRange: function(rangeStart, rangeStop) {
    var content = this.get('fullContent').slice(rangeStart, rangeStop);
    this.replace(0, this.get('length'), content);
  }

Ответ 2

С помощью ember-data-beta3 вы можете передать meta -property в свой результат. По умолчанию RESTSerializer ищет это свойство и сохраняет его. Вы можете получить доступ к метаданным следующим образом:

var meta = this.get("store").metadataFor("post");

Если вы не можете изменить JSON, возвращенный с сервера, вы можете переопределить extractMeta -hook на ApplicationSerializer (или любой другой сериализатор, специфичный для модели).

App.ApplicationSerializer = DS.RESTSerializer.extend({
  extractMeta: function(store, type, payload) {
    if (payload && payload.total) {
      store.metaForType(type, { total: payload.total });  // sets the metadata for "post"
      delete payload.total;  // keeps ember data from trying to parse "total" as a record
    }
  }
});

Подробнее о метаданных здесь