0

我想在同一页面上呈现事件和约会。但是,当我使用AppointmentController中的需求 api来访问EventsController时,我可以看到它在检查时返回了“事件控制器内容属性”内的约会。但是,当我尝试使用包含“约会”的返回内容来获取约会时,它失败了。我正在使用 eventAppt = this.get('controllers.events').get('model');在AppintmentsController中获取事件内容 它获取内容并且此返回的内容具有“约会”作为其数据的一部分,但是当我尝试使用以下命令获取返回内容数据中的约会列表时:eventAppt.get('appointments'); this.set('content', myApppoint); ,它总是失败,无法调用 undefined 的方法 '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));
     }
  });

事件控制器

 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')
});

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

4

1 回答 1

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.

我希望这能让事情变得更清楚。

于 2013-05-27T16:25:18.940 回答