Emberjs-1.0.0-rc.6无法过滤控制器内容以返回特定属性的值

时间:2013-07-22 16:16:17

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

我有CalendarController,它使用需要api来访问AppointmentController,目的是过滤内容AppointmentController并仅返回 event.start 。但我尝试了过滤器() forEach(),它总是返回所有不同的属性,而不是仅返回 event.start 。当我使用 map()时,它会在控制台中仅提供我想要的 event.start 值,但随后handlbars无法显示任何内容。

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)]

jsfidle ,当我们使用 map()时,日历模板不显示任何内容。此 jsfiddle 使用 FILTER()和日历模板显示内容,但不仅仅是event.start,它会返回每个内容并过滤任何内容。

 App.AppointmentsController = Ember.ArrayController.extend({ });

使用 filter()的日历控件 todayEvent 属性:

 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()

});

注意我添加了{{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.Router.map(function() {
  this.route('events');    
  this.resource('appointments');
  this.route('calendar', {path: '/cal'});
});

使用了ember-model:

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

});

App.Event = Ember.Model.extend( {
  title: Ember.attr(),
  start: Ember.attr(Date),
  end: Ember.attr(Date),
  allDay: Ember.attr(Boolean),
  appointments: Ember.hasMany('App.Appointment',  {key:  'appointment_ids'})
});

1 个答案:

答案 0 :(得分:1)

filter方法只返回传递函数计算结果为true的枚举数。您可以像使用map方法一样使用map方法。你的代码

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

按预期返回一个开始日期数组。输入错误是在你的日历中。

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

Your fiddle