14

我在页面中显示使用 Ember Data RESTAdapter 获取的文章列表。我需要实现一个引导式分页器(请参阅: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 映射以解决此类情况?

4

2 回答 2

4

尝试使用Ember 分页支持 Mixin并提供您自己的以下方法的实现。您可以在用户浏览页面时获取所需的内容,而不是加载所有内容。您最初需要的只是记录的总帐户。

didRequestRange: function(rangeStart, rangeStop) {
    var content = this.get('fullContent').slice(rangeStart, rangeStop);
    this.replace(0, this.get('length'), content);
  }
于 2013-01-24T00:26:40.600 回答
3

使用 ember-data-beta3,您可以在结果中传递meta-property。默认的 RESTSerializer 会查找该属性并将其存储。您可以像这样访问元数据:

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

如果您无法更改从服务器返回的 JSON,您可以覆盖extractMetaApplicationSerializer(或任何其他特定于模型的序列化程序)上的 -hook。

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
    }
  }
});

在此处阅读有关元数据的更多信息

于 2013-11-29T08:41:32.300 回答