从普通的 Ember.Object 类访问控制器



我有一个余烬对象,如下所示:

App.Obj = Ember.Object.extend({});

和控制器:

App.myController = Ember.Controller.extend({});

问题是我可以从对象访问myController App.Obj吗?如果是,如何?

场景是:

1)我有这样的模型:

OlapApp.Measure = Ember.Object.extend({});
OlapApp.Measure.reopenClass({
measure:Ember.A(),
find:function(cubeUniqueName){
    var c = Ember.A();
    var xhr = $.ajax({
        type: 'POST',
        dataType: 'json',
        contentType: 'application/json',
        url: 'http://localhost:9095/service.asmx/getMeasures',
        data: '{"cubeUniqueName":"'+cubeUniqueName+'"}',
        success: function(response) {
            var data = JSON.parse(response.d);
            $.each(data,function(i,v) {
             c.pushObject(OlapApp.Measure.create(v));
            });
        }
    });
    return c;
},
findByUniqueName:function(un){
}
});

2)我有一个下拉列表,当下拉列表的选择索引更改时,调用setMeasure,所以我为每个控制器设置模型:

OlapApp.CubeController = Ember.ArrayController.extend({
needs:['application','measure','dimenssion'],
content:[],
selectedValue:'',//this is the buffer for the select
realValue:'',//this is the real value
setMeasure:function(name){
    this.get('controllers.measure').set('model',OlapApp.Measure.find(name));
       this.get('controllers.dimenssion').set('model',OlapApp.Dimenssions.find(name));
},
actions:{
    refreshCubes:function(){
        this.set('model','');
        this.set('model',OlapApp.Cubes.findAll());
    }
}
});

3)现在使用此模型,我创建了一个项目列表。我希望当用户单击此项目中的任何一个时,我将项目的唯一名称发送到OlapApp.Measure.findByUniqueName(),并在此方法中获取模型并在模型中搜索以找到正确的记录。目前我有2个问题,我无法获得模型,我不知道如何在模型中搜索。我尝试以您的方式使用,但我有一些问题

  • 我有ArrayController,使用Ember.ArrayController.create()时出现错误

如果你问自己为什么我使用这种方式而不是余烬方式,你可以在我的问题中找到一些信息

从您的代码片段来看,您并不清楚您要实现的目标,并且肯定有更好(更像 ember )的方法,但是要访问您的控制器很简单,首先使用 create 而不是 extend因为由于这个控制器不是大腿到无处 余烬不会为您实例化它,所以您必须自己做:

App.myController = Ember.Controller.create({
  someProperty: 'hello'
});

然后使用全名访问您之前创建的实例:

App.Obj = Ember.Object.extend({
  myFunction: function() {
    console.log(App.myController.get('someProperty')); // should print 'hello'
  }
});

顺序在这里很重要,因此在尝试访问控制器之前,请先创建控制器。

要测试它是否正常工作,请实例化您的App.Obj然后调用该函数,如下所示:

App.obj = App.Obj.create();
obj.myFunction(); // should print 'hello'

希望对您有所帮助。

最新更新