1

実際に、EmberJs フレームワークを使用してモジュラー Web アプリケーションを構築しようとしています。起動時に、すべてのコア機能をアプリケーションにロードしたいと考えています....ユーザーがアプリケーションと対話する場合、独自のビューとコントローラーを使用して、いくつかの ember ウィジェットをアプリケーションにリロードします。私の質問は、リロードされたコントローラーとビューをアプリケーションに挿入するにはどうすればよいですか?

私は次のことを試みます:

App.getPath('router.applicationController.controllers').reopen({
    aController   : this.AController.create()
});

しかし、これはうまくいかないようです。

4

1 に答える 1

2

良いニュース: あなたの目標 (起動時にコア fx をロードし、ユーザーがアプリを操作するときにビュー/コントローラーをリロードする) は、ほとんどの ember アプリケーションに共通しています。悪いニュース: 期待どおりに動作しないため、リファクタリングが必要になる場合があります。

ルーターが初期化されると、名前空間で定義されたすべてのコントローラー クラスのシングルトン インスタンスが作成されます。コントローラ インスタンスは長寿命であることを意図しており、インスタンス化するには軽量である必要があります。確かに、init() などでデータをロードするべきではありません。

ユーザーがアプリ内のさまざまなルートに移動したら、connectOutlets() を使用してコントローラーに適切なデータを設定し、それらをビューにバインドします。Ember は、必要に応じてビュー クラスのインスタンスを自動的に作成/破棄します。したがって、基本的に、コントローラーをリロードするときに実行しようとしていたことはすべて、代わりにここで実行する必要があります。これがどのように機能するかの詳細については、router.js ソースの「Injecting Controller Singletons」セクションを参照することをお勧めします: https://github.com/emberjs/ember.js/blob/master/packages/ ember-routing/lib/router.js#L295

上記のアプローチに従えば、コントローラー インスタンスをルーターに挿入する必要なく、アプリは規定の設計目標を達成できます。

わかる?

于 2012-07-26T16:54:33.767 に答える