Emberjs:从App.ready中访问应用程序控制器

时间:2013-02-06 07:42:32

标签: controller ember.js loaded

我想从App.ready中设置ApplicationController的属性。但我不知道如何在这个函数中做到这一点

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

这样的事情可能吗?

干杯

1 个答案:

答案 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开发者所厌恶(虽然我不能肯定地说)。