我想在同一页面上呈现事件和约会。但是,当我使用 AppointmentController 中的需要api 来访问 EventsController 时,我可以看到它在中返回约会检查时事件控制器内容属性'。但是,当我尝试使用包含'约会'的返回内容来提取约会时,它会失败。我正在使用 eventAppt = this.get('controllers.events')获取 AppintmentsController 中的事件内容.get('model'); 获取内容和此返回的内容将'约会'作为其数据的一部分,但当我尝试使用以下内容获取返回内容数据中的约会列表时: eventAppt.get('appointmentments'); this.set('content',myAppoint); ,它始终失败,无法调用未定义的方法'indexOf'。
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')
});
是否有人知道为什么这不起作用。
答案 0 :(得分:2)
在更好地查看代码之后,很明显为什么会出现错误。让我试着解释一下。当你这样做时:
var eventAppt = this.get('controllers.events').get('model');
这将返回一个events
数组,并且在此数组的元素内部是您的约会。因此:
//does not work because eventAppt is an array
var myAppoint= eventAppt.get('appointments');
正确引发错误,因为你想要从appointments
数组中获取events
,这有意义吗?
因此,如果您需要生成appointments
模型中的所有event
,那么您应该遍历您的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.
我希望现在能让事情变得更加清晰。