0

我有这样的路线,控制器,视图。问题是我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();
   }
});
4

1 回答 1

3

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

现在之所以你的未定义,是因为 Ember.js 自动将控制器的内容设置为路由中钩子content的返回值。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 [];
  }
});
于 2013-04-09T06:58:26.273 回答