3

Javaクラスには、プロパティとそれらのプロパティを操作するためのメソッドがあります。ExtJSクラスには、プロパティ、メソッド、およびがありconfigOptionsます。概念的には、とプロパティ
の違いは何ですか?configOptionsなぜ両方が必要なのですか?

4

1 に答える 1

10

私の理解によると…</h2>

configs-クラスの動作を定義するコンストラクターで渡されます。configsは効果がないため、実行時に変更しないでください。パネルのタイトルを指定する必要がある場合は、configを追加できます{ title : 'some title' }。パネルはレンダリング時にパネルのタイトルを設定するために使用されますが、その後、タイトルを変更しようとしても、その構成オプションを変更するだけではプロパティを変更できません。

プロパティ-そのクラスに役立つ情報を格納するために使用されます。これは通常、コンストラクターを介して渡されませんが、getterメソッドとsetterメソッドが必要です。実行時にプロパティを変更でき(setterメソッドが定義されている場合)、クラスオブジェクトがこれを検出する必要があります。変更すると、クラスオブジェクトによって変更される読み取り専用プロパティも存在する可能性があります。すべてを変更するべきではありません。

より詳しい情報

Sencha:Ext4ドキュメントのプロパティと構成

この質問に対する私の答えは、少し単純で理想的です。すべての微妙な点を網羅した完全な答えを出そうとすると、状況を明確にするよりも混乱を助長する可能性が高くなります。

構成オプションは、オブジェクトの作成時にオブジェクトを構成するために使用されます。インスタンス化された後でオブジェクトのプロパティとしてそれらを設定しようとしても、多くの場合、効果がありません。

Ext.create('Ext.panel.Panel', {
    // config options go here
});

オブジェクトには多くのプロパティがありますが、[プロパティ]セクションにリストされているものだけをパブリックプロパティと見なす必要があります。プライベートプロパティへのアクセスを妨げるものは何もありませんが、最後の手段としてのみ実行する必要があります。可能な場合は、代わりに文書化されたメソッドを使用してそれらを操作してみてください。

// rendered is a public property used to indicate whether the panel has been rendered
if (panel.rendered) {
    // could just do panel.el but that isn't a public property, so use getEl instead
    var el = panel.getEl();
    ...
}

線がぼやける理由の1つは、オブジェクトが通常、次のように構成を自分自身にコピーすることです。

Ext.apply(this, config);

これにより、少なくとも最初は、すべての構成オプションがプライベートプロパティになります。内部的にクラスはこれらのプロパティを適切に操作できますが、外部からこれらのプロパティにアクセスすることはカプセル化の違反であり、回避する必要があります。

于 2013-03-27T20:39:42.000 に答える