23

extjs では、 を介していつでも extjs クラスを拡張できますconstructor()。から派生するクラスについては、Componentを介して拡張することもできますinitComponent()

普遍的な拡張方法のように見えるのにinitComponent、なぜ多くのコードが を介して拡張されるのか疑問に思っています。よりも明確な利点がありますかconstructor?initComponentconstructor

4

3 に答える 3

18

まず、via をオーバーライドする機能constructorが Ext の新しいバージョンで追加されたinitComponentため、特定の時代のすべてのコードは initComponent を使用する必要がありました。最近では、基本クラスの initComponent が呼び出された(コンストラクターはこれには早すぎます)、コンポーネントがレンダリングされる前に何かをしたい場合は、依然として initComponent をオーバーライドします。多くの場合 (最も一般的な構成の設定のように)、実際にはどちらの方法でも問題はなく、ほとんどの人は最も便利な方法で行います。ただし、それが重要な場合もあります。

于 2010-07-03T17:35:32.460 に答える
2

Jay Garcia の著書 ExtJS in Action からの関連する引用を次に示します。

initComponent は Component クラスのコンストラクター内で実行されますが、Component のいくつかの重要なセットアップ タスクが実行された後にのみ実行されます。これらのタスクには、クラスのインスタンスへの構成オブジェクト プロパティのキャッシングと適用が含まれます。

そして後で、構成パラメーターがインスタンスに適用される場所であるコンストラクターに照らして:

サブクラスの構成済みインスタンスを cloneConfig を介して複製する必要がある場合は、コンストラクターを介して拡張することが最善の選択です。

ところで、Jay の本は ExtJS 3 に関するものですが、cloneConfig は ExtJS4 でも関連しているようです。見る:

http://docs.sencha.com/ext-js/3-4/#!/api/Ext.Component-method-cloneConfig

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.Component-method-cloneConfig

于 2012-01-03T22:07:54.680 に答える