1

我有一个 ember 对象,例如:

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

和一个控制器:

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

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

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

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

4

1 回答 1

1

从您的代码片段中,您并不清楚您要实现什么,并且肯定有更好(更像灰烬)的方式,但是要访问您的控制器是直截了当的,首先使用create而不是extend因为因为这个控制器不是狭窄到无处 ember不会为你实例化它,所以你必须自己做:

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'

希望能帮助到你。

于 2013-09-18T08:29:40.483 回答