访问控制器功能内嵌的内容

问题描述:

我有一个像这样的路由,控制器,视图。问题是我从视图中调用了控制器功能reloadTime,但是在reloadTime函数中,我控制此控制器的内容,但它说它是undefined。我的问题是如何访问这个内容在烬?访问控制器功能内嵌的内容

App.ActivecallsRoute = Ember.Route.extend({ 
    setupController:function(controller,model){ 
     $.ajax({ 
      url:'requests/activecalls.php', 
      type:'POST', 
      success:function(data){ 
       App.Cdrglobal.set('active_call',data.length); 
       controller.set('content',data); 
      } 
     }) 
    } 
}); 

App.ActivecallsController = Ember.ArrayController.extend({ 
    content:[], 
    deleteCall:function(model){ 
     var obj = this.findProperty('ID',model.ID); 
     App.Cdrglobal.set('active_call',App.Cdrglobal.active_call-1); 
     this.removeObject(obj); 
    }, 
    reloadTime:function(){ 
     console.log(this.get('content'));//console undefined 
     console.log(this.content);console undefined 
    } 
}); 


App.ActivecallsView = Ember.View.extend({ 
    didInsertElement:function(){ 
     this.get('controller').reloadTime(); 
    } 
}); 

您正在访问content属性。您得到undefined的原因是因为content属性实际上是未定义的。

现在你的content未定义的原因是因为Ember.js自动将控制器的内容设置为路由中model钩子的返回值。

因为你,如果这个钩子是undefined,因此Ember.js在控制器content属性设置为undefined没有定义model方法的返回值。

解决方案:

创建仅返回一个空的阵列的假人模型钩:

App.ActivecallsRoute = Ember.Route.extend({ 
    setupController:function(controller,model){ 
    $.ajax({ 
     url:'requests/activecalls.php', 
     type:'POST', 
     success:function(data){ 
     App.Cdrglobal.set('active_call',data.length); 
     controller.set('content',data); 
     } 
    }); 
    }, 
    model: function() { 
    return []; 
    } 
});