我想从App.ready中设置ApplicationController的属性。但我不知道如何在这个函数中做到这一点
App.ready = function() {
this.controller.set("isLoaded", true) ;
}
这样的事情可能吗?
干杯
答案 0 :(得分:3)
如果没有直接链接对象(路由器>控制器>视图),那么直接设置控制器值是不可能的,但我也想问一下为什么你希望从ready事件中设置ApplicationController中的内容。您可以选择两种方法。您可以创建一个新的Ember对象并从那里的ready事件中设置一个值,并让控制器观察该属性(例如here。第二个选项是响应ApplicationView上的'didInsertElement'事件(例如here)
选项1:
App = Em.Application.create({
ready: function () {
App.SomeObject.set('someValue', 'A value');
alert('ready event fired');
}
});
App.SomeObject = Em.Object.create({
someValue: '1'
});
App.ApplicationController = Em.Controller.extend({
someFunction: function () {
// do something here (note that the original value of 1 for someValue is never set as the application
// overwrites it immediately
}.observes('App.SomeObject.someValue')
});
App.ApplicationView = Em.View.extend({
didInsertElement : function () {
alert('view has been inserted into the dom');
alert(App.SomeObject.get('someValue'));
}
});
选项2:
window.App = Em.Application.create({
ready: function () {
alert('app is ready');
}
});
App.ApplicationController = Em.Controller.extend();
App.ApplicationView = Em.View.extend({
didInsertElement : function () {
alert('view has been inserted into the dom');
}
});
编辑:请注意,我很确定选项1是凌乱的,并且会被Ember开发者所厌恶(虽然我不能肯定地说)。