26

up() down() と Ext.getCmp(ID) の間の grep オブジェクトにどちらを使用する必要があるか非常に混乱しています。

私にとっては、オブジェクトに ID を定義し、Ext.getCmp('ID') でオブジェクトを取得する方が簡単で、コードがよりきれいに見えます。

例えば:

console.log(this.up('panel').up('panel').down('grid'));
console.log(Ext.getCmp('myPanel'));

どちらがパフォーマンスに優れていますか?

4

2 に答える 2

34

ID と getCmp を使用してコンポーネントを見つけるには、重大な落とし穴があります。主な問題は、ほとんどの場合、マークアップが無効な HTML である重複した ID を持つ HTML 要素を作成するため、コンポーネントを安全に再利用できないことです。さらに、同じ ID を持つ 2 つのコンポーネントがある場合、フレームワークがコンポーネントへの正しい参照を取得しないため、追跡が困難な予期しない動作に遭遇します。

これに関するいくつかのブログとフォーラムの投稿、およびこのトピックをカバーする J. Garcia によるビデオがあります。getCmp の使用方法として推奨されるのは、デバッグ専用であり、本番環境で使用できるコードの場合は他のメソッド (up、down、refs、itemId、およびComponentQuery ) に切り替えることです。

于 2012-08-08T23:28:39.383 に答える
15

Ext.getCmp()は内部でハッシュ マップを使用するため、キーに基づいて配列内の値を取得するのとほぼ同じ速さで点灯します。

.up()down()コンポーネント階層のトラバーサルを使用して実装されますが、これはプロセスが遅くなります。

ただしup()down()セレクターを使用すると、id だけでなくクラスも選択できます。

多数のコントロールに共通のハンドラーがある場合up()や、目的のコンポーネントがフレームワークによって自動生成されたために、down()自分自身を識別します。

于 2012-08-08T20:57:01.117 に答える