web-dev-qa-db-ja.com

up()およびdown()対Ext.getCmp()

Up()down()とExt.getCmp(ID)の間でgrepオブジェクトに使用する必要のあるものを非常に混乱しています。

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

例えば:

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

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

26
Expert wanna be

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

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

34
dbrin

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

.up()およびdown()は、コンポーネント階層のトラバーサルを使用して実装されますが、これは処理速度が遅くなります。

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

あなたは、あなたがup()またはdown()を使いたいかもしれない様々な状況であることを覚えておく必要があります。後はフレームワークによって自動生成されたため、自分でIDを付与することはできません。

15
Izhaki