filter paginate将参数传递给异步ember数据关系请求

时间:2014-12-11 17:47:05

标签: javascript ruby-on-rails rest ember.js ember-data

我想异步实现对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=2authors/1/articles?tab="hot"之类的请求之前,这没问题。

一种可能的方法是,如控制器所示,我有一个popularArticles属性可以过滤model.articles属性,并且可以在不加载所有文章的情况下生成过滤后的请求。

如何将查询参数传递给ember数据中的异步加载关系?

3 个答案:

答案 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
相关问题