Ember.js Emberjs-1.0.0-rc.6无法筛选控制器内容以返回特定属性的值

Ember.js Emberjs-1.0.0-rc.6无法筛选控制器内容以返回特定属性的值,ember.js,handlebars.js,ember-router,Ember.js,Handlebars.js,Ember Router,我有一个CalendarController,它使用needs api访问AppointmentController,目的是过滤内容AppointmentController并仅返回事件。开始。但是我尝试了filter()和forEach(),它总是返回所有不同的属性,而不是event.start的所有可用计时。当我使用map()时,它只返回事件的map值。在控制台中根据需要启动值,但手杆无法显示任何内容 u = App.__container__.lookup("controller:appo

我有一个CalendarController,它使用needs api访问AppointmentController,目的是过滤内容AppointmentController并仅返回事件。开始。但是我尝试了filter()forEach(),它总是返回所有不同的属性,而不是event.start的所有可用计时。当我使用map()时,它只返回事件的map值。在控制台中根据需要启动值,但手杆无法显示任何内容

u = App.__container__.lookup("controller:appointments");

y = u.get('content');

y.map(function(appointee) { return appointee.get('event.start') });
返回:

[Thu Jul 18 2013 01:00:00 GMT+0100 (GMT Daylight Time), Thu Jul 25 2013 01:00:00 GMT+0100 (GMT Daylight Time), Thu Jul 25 2013 01:00:00 GMT+0100 (GMT Daylight Time)]
当我们使用map()和日历模板时,的将不显示任何内容。此使用过滤器()和日历模板显示内容,但不只是event.start,它返回其所有内容,不过滤任何内容

 App.AppointmentsController = Ember.ArrayController.extend({ });
CalendarscontrollertodayEvent属性使用过滤器()

 App.CalendarController = Em.ObjectController.extend({
   needs: ['appointments'],

   todayEvent: function(){
      var _self = this;
      var appoint = _self.get('controllers.appointments');

      var appCont = appoint.get('content');

      return appCont.filter(function(appointee) {
         return appointee.get('event.start');
      });
  }.property()

});
App.Appointment = Ember.Model.extend({
  name: Ember.attr(),
  event : Ember.belongsTo('App.Event', {key: 'event_id'})
注意:我添加了{name}}属性,以证明todayEvent属性返回的内容不是按event.start进行过滤,而是只返回“event.start”,而是返回所有属性

 <script type="text/x-handlebars" data-template-name='calendar'>

    <h1> from todayEvent</h1>
     {{#each todayEvent}}
        {{name}}<br/>
         {{event.start}}<br/>
     {{/each}}
使用余烬模型:

 App.CalendarController = Em.ObjectController.extend({
   needs: ['appointments'],

   todayEvent: function(){
      var _self = this;
      var appoint = _self.get('controllers.appointments');

      var appCont = appoint.get('content');

      return appCont.filter(function(appointee) {
         return appointee.get('event.start');
      });
  }.property()

});
App.Appointment = Ember.Model.extend({
  name: Ember.attr(),
  event : Ember.belongsTo('App.Event', {key: 'event_id'})
}))


filter方法只返回传递的函数对其求值为true的枚举数。您可以像以前一样使用map方法。你的代码

y.map(function(appointee) { return appointee.get('event.start') });
按预期返回开始日期数组。打字错误在你的日历hbs上

   {{#each todayEvent}}
     {{this}}
   {{/each}}

我看到您的约会控制器中存在一些限制。如果不访问约会路线,其内容永远不会设置。访问日历路由而不访问约会控制器的内容只会导致空数组。我不知道你的代码结构,我想知道答案。除了预加载我的约会模型之外,您是否知道另一种避免这种约束的方法。第二,我可能会问另一个问题,因为我在这里粘贴的代码是我想做的事情的缩短版本。这是通过内容循环并按日期过滤。todayEvent:function(){var\u self=this;var appcommit=\u self.get('controllers.appointments');var appCont=commit.get('content');return appCont.map(function(appointe){return(moment(appointe.get('event.start')).unix()==moment(\u self.get('date')).unix();})}.property('date'))如果将其作为控制器方法进行尝试,它将起作用。请参见App.EventsController和其中的ToDayeEvent方法,但作为App.CalendarController中的控制器属性,如我前面的问题所示,它不会列出特定日期的EVET,而只返回true或false。以下是JSFIDLE:。你知道为什么吗?你又掉进了同样的陷阱。如果希望根据条件返回可枚举项,可以使用filter方法。同时,如果满足条件,还可以通过返回来使用.map方法。看看小提琴。。。您还应该使用getter访问ember KVO属性