Emberjs 1.0.0-RC3:使用need - api访问其他控制器内容属性



我想在同一个页面上呈现事件和约会。但是,当我使用需要api委任控制器来访问EventsController时,我可以看到它在'事件控制器内容属性'检查时返回约会。但是当我尝试使用包含'约会'的返回内容来取出约会时,它失败了。eventAppt = this.get('controllers.events').get('model');它获取的内容和这个返回的内容有'约会'作为其数据的一部分,但是当我试图获得列表内的约会返回的内容的数据使用:eventAppt.get('约会');这一点。set('content', myAppoint);,它总是失败不能调用方法'indexOf'的未定义

jsfiddle

   App.AppointmentsController = Em.ArrayController.extend({
     needs: ['events'],
     appoint: function(){
       console.log("this: ", this.toString());
       var eventAppt = this.get('controllers.events').get('model');
        //This returns the correct data that includes 'appointments'
       console.log(eventAppt);
       var myAppoint=  eventAppt.get('appointments');
       this.set('content', myAppoint);
       //This fails with 'Cannot call method 'indexOf' of undefined'
       console.log(this.get(myAppoint));
     }
  });

EventController

 App.EventsController = Em.ArrayController.extend({
});

模型:

App.Event = DS.Model.extend({
  title: DS.attr('string'),
  start: DS.attr('date'),
  allDay: DS.attr('boolean'),
  appointments: DS.hasMany('App.Appointment')
});

有谁知道为什么这不起作用吗

仔细查看代码后,就会明白为什么会出现错误。让我来解释一下。当你这样做的时候:

var eventAppt = this.get('controllers.events').get('model');

this返回一个events的数组,在这个数组的元素中是你的约会。因此做:

//does not work because eventAppt is an array
var myAppoint=  eventAppt.get('appointments');

抛出正确的错误,因为你正试图从events的数组获得appointments,有意义吗?

因此,如果您需要event模型中所有的appointments,那么您应该循环events内容并提取约会,或者如果您只想要一个特定的约会,则应该这样做:

var eventAppt = this.get('controllers.events').get('model');
eventAppt.objectAt(1).get('appointments') // this prints correctly the appointments of the first event in the array of events.

最新更新