1

我想从 App.ready 中设置 ApplicationController 的属性。但我看不出如何从这个函数中完成

App.ready = function() {
    this.controller.set("isLoaded", true) ;
}

这样的事情可能吗?

干杯

4

1 回答 1

3

如果对象没有直接链接(Router > Controller > View),那么直接设置控制器值是不可能的,但我也会质疑为什么你希望从 ready 事件中在 ApplicationController 中设置一些东西。您可以采取两种选择。您可以创建一个新的 Ember 对象并从那里的 ready 事件中设置一个值,并让控制器观察该属性(此处为示例。第二个选项是响应 ApplicationView 上的“didInsertElement”事件(此处为示例)

选项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 开发人员不赞成(尽管我不能肯定地说)。

于 2013-02-06T12:22:15.437 回答