extjs では、 を介していつでも extjs クラスを拡張できますconstructor()
。から派生するクラスについては、Component
を介して拡張することもできますinitComponent()
。
普遍的な拡張方法のように見えるのにinitComponent
、なぜ多くのコードが を介して拡張されるのか疑問に思っています。よりも明確な利点がありますかconstructor
?initComponent
constructor
extjs では、 を介していつでも extjs クラスを拡張できますconstructor()
。から派生するクラスについては、Component
を介して拡張することもできますinitComponent()
。
普遍的な拡張方法のように見えるのにinitComponent
、なぜ多くのコードが を介して拡張されるのか疑問に思っています。よりも明確な利点がありますかconstructor
?initComponent
constructor
まず、via をオーバーライドする機能constructor
が Ext の新しいバージョンで追加されたinitComponent
ため、特定の時代のすべてのコードは initComponent を使用する必要がありました。最近では、基本クラスの initComponent が呼び出された後(コンストラクターはこれには早すぎます)、コンポーネントがレンダリングされる前に何かをしたい場合は、依然として initComponent をオーバーライドします。多くの場合 (最も一般的な構成の設定のように)、実際にはどちらの方法でも問題はなく、ほとんどの人は最も便利な方法で行います。ただし、それが重要な場合もあります。
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