4

例とドキュメントを検索しましたが、ComponentQuery クエリでワイルドカードを使用できるかどうかがわかりませんでした。私は次のことをしたい:

 Ext.ComponentQuery.query('button > menu > menuitem[text="Welcome*"]');

ボタンのテキストは現在のユーザー名になるため、たとえば「Welcome Shaun」などです。

4

3 に答える 3

4

試す

Ext.ComponentQuery.query('menuitem {text.search(\' Menu Item \')!=-1}');

ドキュメントによると、カスタム式を使用できます。これは、以下に含めたコードで機能します。

var toolbar = Ext.widget('toolbar', {
        items   : [
            {
                xtype:'splitbutton',
                text: 'Menu Button',
                iconCls: 'add16',
                menu: [{text: 'Menu Item 1'},{text: 'Menu Item 2'}],
                reorderable: false
            },
            {
                xtype: 'button',
                text: 'Get matches',
                handler: function(){
                    var match = Ext.ComponentQuery.query('menuitem{text.search( \'Menu Item\' )!=-1}');
                    console.log( match )
                }
            }
        ]
    });

    Ext.widget('panel', {
        renderTo: Ext.getBody(),
        tbar    : toolbar,
        border  : true,
        width   : 600,
        height  : 400
    });
于 2013-01-24T18:31:51.837 に答える
3

完全を期すために(メンバー式がクエリをクラッシュさせる可能性があるため)

@existdissolve述べたように、あなたの場合のようにメンバー式を使用して、ワイルドカードに似た(同じではない!)ものをアーカイブできます

Ext.ComponentQuery.query('button > menu > menuitem{text.search("Welcome")!=-1}');

これは、見つかったメニュー項目のテキスト プロパティに対してネイティブ JS 検索操作を実行しようとします。このプロパティ(またはメソッド)が存在するかどうかに関係なく、メンバー式の主な問題につながります

メンバー式について知っておくべきこと

ほぼすべてのセレクターでメンバー式を使用できますが、それらはそのセレクターに存在する必要があります。そうしないと、クエリを中止する例外が発生します (完全に例外のように)。

簡単な例を次に示します。テキストでボタンを見つけたいとしましょう。問題ありません。すべてのボタンにテキストが必要ですよね。これは、一部のボタンはテキストを必要とせず、単純な画像で十分だと顧客が不満を言うまで、かなりの時間機能します。クエリのことを忘れてボタンを追加すると、突然アプリケーションの一部が機能しなくなり、最終的に次のような例外が発生します

キャッチされていない TypeError: 未定義のメソッド 'search' を呼び出せません

このJSFiddle の例で自分で試すことができます。「私を見つけて」を試してから、「画像の追加」ボタンを押して、もう一度試してください。

なぜこれが起こるのですか?プロパティが存在するかどうか、式が存在するかどうかのExt.ComponentQueryテストは、クエリの完全な失敗にすぐにつながる可能性があります。

はい、上記の例は単純で、エラーの原因をすぐに見つけることができますが、完全に異なる場合もあります。

今何?メンバー式を使用してはいけないと言いたいわけではありませんが、直面する可能性のある副作用に注意する必要があります。

于 2013-01-25T08:20:59.240 に答える