我们假设我有两个模型user
和post
。一个user
可以有多个post
,每个post
属于一个user
。在特定页面上,我想根据日期显示post
,通常只有今天的帖子。 我应该如何设计关系?
我可以在控制器中创建方法,比如
App.ProfileController = Ember.ObjectController.extend
getPostsForToday: (->
@store.all('posts').filterProperty('date', '2014-10-17')
但在我看来,我应该把这个逻辑放到模型中
App.User = DS.Model.extend
todayPosts: (->
DS.hasMany("posts").filterProperty('date', '2014-10-17') //something likes this
但是,通过这种方式,我无法动态更改日期,是吗?根据日期处理关系的最佳策略是什么?
答案 0 :(得分:2)
我认为要做的就是使用ArrayController
,它内置排序,并过滤进入路线的结果。
ArrayController:
App.TodaysPostsController = Ember.ArrayController.extend({
sortBy: 'date'
});
控制器:
App.ProfileController = Ember.ObjectController.extend({
needs: ['todaysPosts'],
todaysPosts: Ember.computed.alias('controllers.todaysPosts'),
});
路线:
App.ProfileRoute = Ember.Route.extend({
setupController: function(controller, model) {
// perform default functions
this._super(controller, model);
this.store.findAll('post');
var $this = this;
var today = '2014-10-17';
// this will updated whenever any of the posts models change
this.store.filter('post', { 'date': today }, function(post) {
return post.get('date');
})
.then(function(todaysPosts) {
$this.controllerFor('todaysPosts').set('model', todaysPosts);
});
}
});
阵列控制器http://emberjs.com/api/classes/Ember.ArrayController.html上的信息
商店过滤信息http://emberjs.com/api/data/classes/DS.Store.html#method_filter