Emberjs1.0.0-RC3:在视图变量中调用和存储控制器方法时未定义

时间:2013-05-28 16:01:45

标签: ember.js handlebars.js

在这个jsfiddle中,在 didInsertElement hook 中,我试图调用一个名为 eventJSON 的控制器方法,它在CalendarsController中定义,我正在存储或者将该调用传递给我在CalendarsView中的didInsertElement钩子中声明的名为 calendarJSON 的变量中的控制器动作。但是当我记录结果时,它会给出undefined。另外,如果我在didInsertElement钩子中放置一个调试器并检查控制台中的变量,它将返回undefined。

我想在变量中存储从 var calendarJSON = this.get('controller')。send('eventJSON'); 返回的数据,因为我想随后将该数据传递给fullcalendar jquery

jsfiddle

控制器:

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

1 个答案:

答案 0 :(得分:0)

我修改了下面粘贴的内容以使其运行。基本上,我没有使用关键字return从控制器返回任何内容。其次,我将访问控制器操作的步骤分为两步。在步骤1中,我获取控制器,然后在其上调用事件,如下所示:

 var controller = this.get('controller');
 var calendarJSON = controller.eventJSON();

working jsfiddle

调整后的代码:

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