我有一个余烬对象,如下所示:
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'
希望对您有所帮助。