如何在Ember.js中有效地将记录过滤到不同的列表中?

时间:2014-12-10 06:55:12

标签: ember.js


我有一个应用程序,我可以创建待办事项并根据它的日期列出, 类似的东西:

---------------
Today - [todayDate]
---------------
Todo #1
Todo #2

---------------
Tomorrow - [tomorrowDate]
---------------
Todo #1
Todo #2

所以我这样做是首先创建所有过滤条

<div id="today-filter" class="filter-container">
  <div class="filter-bar">
    <label class="filter-title">Today</label>
    <label class="filter-date">{{generateDate}}</label>
  </div>  
</div>
  {{#each todo in todayFilter itemController='todo'}}
    {{partial 'todolist'}}
  {{/each}}

<div id="tomorrow-filter" class="filter-container">
  <div class="filter-bar">
    <label class="filter-title">Tomorrow</label>
    <label class="filter-date">{{generateDate 1}}</label>
  </div>  
</div>
  {{#each todo in tomorrowFilter itemController='todo'}}
    {{partial 'todolist'}}
  {{/each}}    


并且每个人都在控制器中获得了自己的功能,这将返回不同的过滤记录:

todayFilter: function(){
  return this.get('model').filter(function(todo, index){
    var date = todo.get('date');

    if(moment().isSame(date, 'days')){ //<-- If the date is same as today, then it's today
      return todo;
    }
  });
}.property('model.@each.date'),


tomorrowFilter: function(){
  return this.get('model').filter(function(todo, index){
    var date = todo.get('date');

    if((moment().add(1, 'days')).isSame(date, 'days')){ //<-- If the date is same as today+1 day, then its tomorrow
      return todo;
    }
  });
}.property('model.@each.date'),

所以问题是我是否需要在'今天'的范围内列出它们 - &gt; '一周以内', 我需要编写7种不同的功能?
我确信有更好的方法,也许我现在在做什么是愚蠢的,但我无法建立更好的逻辑。

1 个答案:

答案 0 :(得分:0)

我不知道你的模型的结构,所以这是基于简单的假设:
假设您的模型对象有2个字段dateavailable。每天创建一个排序列表可以做的一件简单的事情就是:

  • 创建一个参考日数组:[1月1日,1月2日,...,12月31日](使用moment.js轻松管理)。其中每个都应该是Date对象,包含在一个带有日期字段的简单javascript对象中:{ date: new Date() }
  • 使用Array.concat将您的模型数组合并到此
  • 根据日期属性
  • 对结果数组进行排序
  • 显示结果数组,使用available属性知道这是真实的日期/事件,还是仅仅是您创建的“标题”日期。

这有帮助吗?

这是complete solution。  我没有使用concat来简化,因为解决方案已经非常复杂了。