在这个jsfiddle中,在 didInsertElement hook 中,我试图调用一个名为 eventJSON 的控制器方法,它在CalendarsController中定义,我正在存储或者将该调用传递给我在CalendarsView中的didInsertElement钩子中声明的名为 calendarJSON 的变量中的控制器动作。但是当我记录结果时,它会给出undefined。另外,如果我在didInsertElement钩子中放置一个调试器并检查控制台中的变量,它将返回undefined。
我想在变量中存储从 var calendarJSON = this.get('controller')。send('eventJSON'); 返回的数据,因为我想随后将该数据传递给fullcalendar jquery
控制器:
App.CalendarsController = Em.ArrayController.extend({
eventJSON: function() {
//returns the json of controller's content
this.invoke('toJSON');
return this.get('content');
}
});
观点:
App.CalendarsView = Ember.View.extend({
templateName: 'calendars',
attributeBindings: ['id'],
id: "mycalendar",
didInsertElement: function() {
debugger;
this._super();
//Right here is the problem
var calendarJSON = this.get('controller').send('eventJSON');
console.log(calendarJSON);
this.$().fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
editable: true,
events: calendarJSON
});
}
});
答案 0 :(得分:0)
我修改了下面粘贴的内容以使其运行。基本上,我没有使用关键字return
从控制器返回任何内容。其次,我将访问控制器操作的步骤分为两步。在步骤1中,我获取控制器,然后在其上调用事件,如下所示:
var controller = this.get('controller');
var calendarJSON = controller.eventJSON();
调整后的代码:
App.CalendarsController = Em.ArrayController.extend({
eventJSON: function() {
m = this.get('content');
m.invoke('toJSON');
console.log(m);
return m;
}
});
观点:
App.CalendarsView = Ember.View.extend({
templateName: 'calendars',
attributeBindings: ['id'],
id: "mycalendar",
didInsertElement: function() {
this._super();
var controller = this.get('controller');
var calendarJSON = controller.eventJSON();
console.log(calendarJSON);
this.$().fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
editable: true,
events: calendarJSON
});
}
});