7

ボタンをクリックしてコンポーネントを動的に作成する必要があります。私の制限は次のとおりです。

  1. IDは、「myComp_」のような固定文字列で始まり、その後に乱数が続きます。
  2. いつでも、IDが「myComp_xxx」で始まるコンポーネントは1つだけになります。

したがって、コンポーネントを作成する前に、以前に作成されたものがあるかどうかを確認して削除する必要があります...私の問題はここから始まります。Ext.getCmp()は特定のIDを必要とします。しかし、私はその固定文字列しか持っていません:myComp_..。

以前に作成されたコンポーネントを取得する方法はありますか?

よろしくお願いします。私の英語について申し訳ありません。

4

5 に答える 5

8

ExtJs 4.X の場合Ext.ComponentQuery.query('*[id^=myComp_xxx]');

ExtJs 3.X の場合、次のいずれかを使用できます

var el = Ext.query('*[id^=myComp_xxx]');
var cmp = Ext.getCmp(el.id);

または(これは私が個人的に試したことはありませんが、うまくいくはずだと思います)コンポーネントがアクセスできるコンポーネントの子である場合、次のようになります。

var el = parentComp.find("action","btn");

action : btnボタン構成で呼び出されるプロパティを設定します。

于 2012-10-12T14:59:42.133 に答える
6

あなたが探しているのはDomQueryだと思います。

元:

Ext.query("*[id^=myComp_xxx]")
于 2012-10-12T13:35:12.290 に答える
2

通常のコンポーネント クエリを使用する必要があるように思えますが、一般的に id を使用するのは得策ではありません。xtype および itemId (手動で割り当てることができます) でクエリを実行できます。

以下

Ext.ComponentQuery.query('grid form');  

どこかにフォームが含まれている xtype グリッドを持つすべてのものを検索します。

Ext.ComponentQuery.query('grid #okButton');  

一方、ここの # は、itemId 'okButton' を持つものを含むグリッドを探すことを示しています。

これを必要なレベルにネストし、他の演算子を使用してより具体的にすることができます。他の誰かが正しく指摘したように、コンポーネントで上下を使用して、現在のコンポーネントに対してこれを行うことができます。up と down を使用すると、すべての結果を配列に戻すのではなく、最初の配列を取得するだけであることに注意してください。

詳細については、ドキュメントを参照してください。

理由の詳細については、避けるべき悪い慣行のリストのポイント 6 も参照してください。

于 2014-02-13T16:12:48.147 に答える
2

これを使用する必要があります: Ext.getCmp(id)

Ext.getCmp("myComp_xxx");
于 2012-10-12T13:45:13.940 に答える
0

コンポーネントが作成される「場所」がわかっている場合の別の方法は、up()/down()メソッドを使用することです。

たとえば、ボタンがあり、クリック ハンドラー内に含まれているフォームを取得したい場合は、次のようにすることができます。

function myClickHandler(btn) {
     var form = btn.up('form');

     //do something with form 
}
于 2012-10-12T15:36:14.463 に答える