如何在ember数据中处理基于时间的关系?

时间:2014-10-17 16:00:36

标签: ember.js ember-data

我们假设我有两个模型userpost。一个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
但是,通过这种方式,我无法动态更改日期,是吗?根据日期处理关系的最佳策略是什么?

1 个答案:

答案 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