私はかなり大きなJavascript/ExtJS3コードベースを継承しており、 "... superclass.initComponent.apply(this、arguments)"を呼び出した後、オーバーライドされたinitComponentメソッドの内部でイベントを呼び出すインスタンスが多数存在します。特定のイベントは、次のような方法で特定のオブジェクト上で呼び出されている:私は、オブジェクトとその特定のイベント名との間の結合を低減するために、代わりに、パブ/サブパラダイムを使用するコードを変換開始したフレームワークに関係なく、UIレンダリング後のイベントをパブリッシュ/サブスクライブしていますか?
this.filter.on('filterUpdated', function(filter, params)
initComponent(ExtJSでレンダリングする前に実行する)内のイベントをパブリッシュおよび/またはサブスクライブする際に、すぐに問題に遭遇しました。画面が最初にロードされたときに最高レベルのコンポーネントから「INIT」イベントを発生させる必要があります。(ExtJSの「テンプレート」がレンダリングされていないために)エラーが発生するか、 。
そしてIはExt.ComponentためExtJSのソースに次のように読んで(すべてのコンポーネントが延びているから)、私は「なるほど」モーメントを有していた:私は両方の発行に対して「INIT」を切り替えると
if (this.tpl) {
if (!this.tpl.compile) {
this.tpl = new Ext.XTemplate(this.tpl);
}
if (this.data) {
this.tpl[this.tplWriteMode](contentTarget, this.data);
delete this.data;
}
}
this.afterRender(this.container);
を私の一番上のコンポーネントのafterRenderメソッドからのイベントを取得し、すべてのイベントをafterRenderメソッドの他のすべてのコンポーネントから購読すると、すべてが期待どおりに機能しました。そして、今私は主に私のデザインを検証することをおもしろくしています....
これは、イベントドリブンUIでpub/subを実装する一般的に受け入れられている方法ですか?フレームワークにかかわらず?すなわち、以下の2つの良い原則がありますか、それとも他の方法ですか?すべてのサブコンポーネントが
- 「初期化イベントは、」すべてのサブコンポーネントがすべてイベント(安全のために)彼らは
ありがとうございます。