web-dev-qa-db-ja.com

オブジェクトを定義するときのinitComponentとコンストラクター

initComponentと比較してconstructorを使用する必要があるのはいつですか?

私はinitComponentを使用してオブジェクトを拡張してきましたが、Ext.defineのドキュメントを見ると、コンストラクターを使用していることがわかります。違いはなんですか?

比較:

Ext.define('My.app.PanelPart2', {
    extend: 'My.app.Panel',
    constructor: function (config) {
        this.callSuper(arguments); // calls My.app.Panel's constructor
        //...
    }
});

Ext.define('My.app.PanelPart2', {
    extend: 'My.app.Panel',
    initComponent: function (config) {
        Ext.apply(this, config);
        this.callParent(arguments);
    }
});

一部のコンポーネントが初期化されないという事実を認識しています(私はあなたを見ていますExt.data.Store)、それは普遍的であるはずなので、コンストラクターを書くことだけに傾くように私を導きます。

20
Alex

constructorはOOPオブジェクトインスタンスを初期化するための標準であり、すべてのExtJSクラス(Ext.defineによって作成されたものすべて)で使用できます。

initComponentは、コンポーネントを初期化するためのExtJS拡張機能です-Ext.Componentを拡張するクラスです。テンプレート化されたメソッドパターンを使用し、カスタムコンポーネントの初期化の前後にいくつかの標準的な初期化手順を有効にします。このようなもの:

Ext.Component.constructor() {
    - init events
    - apply config
    - create plugins
    - ...
    - your custom component initialization (initComponent)
    - ...
    - init plugins
    - etc.
}

私のベストプラクティスは、カスタムコンポーネントを作成するときは常にinitComponentを使用し、ジェネリッククラスの場合のみconstructorを使用することです。

36
Pepa Martinec