我想异步实现对ember数据的分页/过滤。
这是我的author
型号:
export default DS.Model.extend({
user: DS.belongsTo('user'),
articles: DS.hasMany('article', { async: true }),
name: DS.attr('string'),
email: DS.attr('string')
});
路线:
export default Ember.Route.extend({
model: function(params) {
return this.store.find('author', params.author_id);
}
});
控制器:
export default Ember.ObjectController.extend({
popularArticles: function() {
return this.get('model.articles').filter({ tab: 'popular' });
}.property('model.articles')
});
请注意,模型的articles
属性与DS.hasMany('article', { async: true})
关系。
如果我使用此属性,则此请求将authors/1/articles
及其异步。
在我需要提出authors/1/articles?page=2
或authors/1/articles?tab="hot"
之类的请求之前,这没问题。
一种可能的方法是,如控制器所示,我有一个popularArticles
属性可以过滤model.articles
属性,并且可以在不加载所有文章的情况下生成过滤后的请求。
如何将查询参数传递给ember数据中的异步加载关系?
答案 0 :(得分:2)
此插件可能有所帮助:https://github.com/mdehoog/ember-data-has-many-query。
允许您向has-many
关系添加查询参数,例如:
post.query('comments', { page: 1 });
答案 1 :(得分:0)
在控制器中你可以这样做:
import Ember from "ember";
import pagedArray from 'ember-cli-pagination/computed/paged-array';
export default Ember.ArrayController.extend({
sortProperties: ['date'],
sortAscending: false,
page: 1,
perPage: 5,
pagedContent: pagedArray("arrangedContent", {pageBinding: "page", perPageBinding: "perPage"}),
queryParams: ["page", "perPage"],
totalPagesBinding: "pagedContent.totalPages"
});
答案 2 :(得分:0)
@ peter-t我不知道您搜索的是什么示例,但您可以在这样的组件中进行过滤:
map<long long, long long> ::reverse_iterator itr_rel = map_of_bit_to_parent.rbegin();
long long total_parent_rels = 0;
if ( itr_rel != map_of_bit_to_parent.rend() )
{
total_parent_rels = itr_rel->first;
}
ember-cli-blog/app/components/blog-posts.js
import Ember from 'ember';
import pagedArray from 'ember-cli-pagination/computed/paged-array';
import computedFilterByQuery from 'ember-cli-filter-by-query/util/filter';
export default Ember.Component.extend({
pagedContent: pagedArray("filteredContent", {pageBinding: "page", perPageBinding: "perPage"}),
totalPagesBinding: "pagedContent.totalPages",
arrangedContent: function() {
return Ember.ArrayProxy.extend(Ember.SortableMixin).create({
sortProperties: ['date'],
sortAscending: false,
content: this.get('posts')
});
}.property('posts'),
filteredContent: function() {
return computedFilterByQuery(
this.get('arrangedContent'),
['title', 'body', 'author', 'excerpt'],
this.get('query'),
{ conjunction: 'and', sort: false}
);
}.property('arrangedContent.@each.title', 'arrangedContent.@each.author', 'query'),
actions: {
createPost: function() {
this.sendAction('createAction');
}
}
});
ember-cli-blog/app/templates/posts.hbs