访问控制器函数ember中的内容

时间:2013-04-09 05:16:23

标签: ember.js

我有一个路线,控制器,这样的视图。问题是我从视图中调用了控制器函数reloadTime但在reloadTime函数中我控制了该控制器的内容,但它说它是undefined。我的问题是如何在ember中访问这些内容?

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

1 个答案:

答案 0 :(得分:3)

您正在正确访问content媒体资源。您获得undefined的原因是因为content属性实际上未定义。

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

由于您没有定义model方法,如果此挂钩为undefined,则返回值,因此Ember.js将控制器content属性设置为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);
      }
    });
  },
  model: function() {
    return [];
  }
});