【问题标题】:Emberjs-1.0.0-rc.6 using enumerable to list events occurring on a particular dateEmberjs-1.0.0-rc.6 使用可枚举列出特定日期发生的事件
【发布时间】:2013-07-21 14:26:11
【问题描述】:

当我定义一个控制器动作来显示特定日期发生的日期时,它可以正常工作,但是如果我将该控制器动作转换为一个属性,它会停止显示特定事件发生的日期。 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')

我要么得到一个像这样 [ ] 的空数组,或者如果我使用 ma​​p() 而不是 filter() 进行过滤,那么它返回 [false, false, false]

jsfiddle

【问题讨论】:

    标签: ember.js handlebars.js ember-router


    【解决方案1】:

    您似乎需要将“content.@each”添加到您的计算属性中。

    就目前而言,“todayEvent”只会在“日期”更改时计算,我猜日期是在内容之前或同时设置的。

    tod​​ayEvent 正在返回 [false, false],因为您使用的是地图而不是过滤器。

    todayEvent: function(){
      var _self = this;
      var appoint = _self.get('controllers.appointments');
      var appCont = appoint.get('content');
    
      return appCont.filter(function(appointee) {
        return (moment(appointee.get('event.start')).unix() == moment(_self.get('date')).unix());    
      });
    }.property('content.@each', 'date')
    

    【讨论】:

    • 感谢 Aaron 查看并建议添加“content.@each”。我现在已经这样做了,但它仍然只是打印出:false false false 而不是所选日期发生的事件。
    • 你有没有把return appCont.map改成return appCont.filter
    • 是的,我试过了,appCont.map、appCont.filterappCont.forEach。返回 false false false 的是 appCont.map。而 appCont.filter 返回未定义。最后 appCont.forEach 返回了商店中的整个事件,而不做任何按日期过滤。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 2013-05-18
    相关资源
    最近更新 更多