1

App.ready 内から ApplicationController のプロパティを設定したい。しかし、この関数内からこれを行う方法がわかりません

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

このようなことは可能ですか?

乾杯

4

1 に答える 1

3

オブジェクトが直接リンクされていない場合([ルーター]>[コントローラー]>[表示])、コントローラー値を直接設定することは実際には不可能ですが、readyイベントからApplicationControllerに何かを設定する理由も疑問に思います。あなたが取ることができる2つのオプションがあります。新しいEmberオブジェクトを作成し、そこでreadyイベントから値を設定し、コントローラーにそのプロパティを監視させることができます(例はこちら。2番目のオプションは、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 に答える