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

时间:2013-09-18 08:23:11

标签: ember.js

我有一个像以下的余烬对象:

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)现在有了这个模型,我创建了一个项目列表。我想当用户点击任何一个项目时,我将item的uniqueName发送到OlapApp.Measure.findByUniqueName(),并在此方法中获取模型并在模型中搜索以找到正确的记录。这时我有2个问题我不能得到模型而且我不知道如何在模型中搜索。 我试着用你的方式,我有一些问题

  • 我有ArrayController,当使用Ember.ArrayController.create()
  • 时我得到并出错

如果你问自己为什么我这样使用这种方式而不是透视方式,你可以在我的question

中找到一些信息。

1 个答案:

答案 0 :(得分:1)

从你的代码片段来看,你真正想要实现的目标并不是很清楚,而且肯定会有更好的(更像是类似的)方式,但访问你的控制器是直截了当的,首先使用create代替{{ 1}}因为因为这个控制器不是无处可去的,所以不会为你实例化它所以你必须自己做:

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

希望它有所帮助。