当我定义一个控制器动作来显示特定日期发生的日期时,它可以正常工作,但是如果我将该控制器动作转换为一个属性,它将停止显示特定事件发生的日期。jsfiddle _
App.EventsController = Em.ArrayController.extend({
todayEvent: function(date){
return this.get('content').filter(function(event) {
return (moment(event.get('start')).unix() == moment(date).unix());
});
}
});
我可以获取控制器的一个实例:
u = App.__container__.lookup("controller:events")
在 25 日的活动中,有 2 个活动,我可以用
u.todayEvent(new Date('2013-07-25').toString())
正确返回
[> Class, > class]
但是在 CalendarEvent 控制器中,我想像上面一样显示特定日期的事件,但这次使用计算属性,所以我将todayEvent重新定义为计算属性,如下所示,只是这一次,它只返回 true 或 false 而不是返回类对象包含当天的事件。
date 属性是在路由器序列化程序挂钩中使用 controllerFor 设置的,而不是像我们之前将 todayEvent 定义为控制器操作时那样传递它。
App.CalendarEventController = Em.ObjectController.extend({
date: null,
needs: ['appointments'],
todayEvent: function(){
var _self = this;
var appoint = _self.get('controllers.appointments');
var appCont = appoint.get('content');
return appCont.map(function(appointee) {
return (moment(appointee.get('event.start')).unix() == moment(_self.get('date')).unix());
});
}.property('date')
});
现在我单击约会链接,然后单击日历链接,然后单击日历中的红色日期之一,因此序列化程序挂钩可以设置控制器日期,然后我进入控制台:
u = App.__container__.lookup("controller:calendarEvent")
尝试在控制台中获取该日期发生的事件:
u.get('todayEvent')
我要么得到一个像这样[]的空数组,要么如果我使用map()而不是filter()进行过滤,那么它返回[false, false, false]
jsfiddle _