我正在显示使用Ember 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映射以解决此类情况?
答案 0 :(得分:4)
尝试使用Ember Pagination Support Mixin并提供您自己的以下方法的实现。您可以在用户导航页面时获取所需内容,而不是加载所有内容。您最初需要的只是您记录的总帐户。
didRequestRange: function(rangeStart, rangeStop) {
var content = this.get('fullContent').slice(rangeStart, rangeStop);
this.replace(0, this.get('length'), content);
}
答案 1 :(得分:3)
使用ember-data-beta3,您可以在结果中传递meta
- 属性。默认的RESTSerializer查找该属性并存储它。
您可以像这样访问元数据:
var meta = this.get("store").metadataFor("post");
如果您无法更改从服务器返回的JSON,则可以覆盖ApplicationSerializer(或任何其他特定于模型的序列化程序)上的extractMeta
- 挂钩。
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
}
}
});