「up」を照会する方法はありますか? 私はコンポーネントにいて、control() を使用してその親イベントにリスナーを登録したいと考えています。これには、メイン ビューの親を取得するクエリが必要です。
4 に答える
ExtJS4 では、Ext 要素から「up()」を使用できます。
params は、検索したい親要素の文字列です。
var parentEl = Ext.get('childID').up('div.parentClass');
コンポーネント/要素の構造に関する詳細を提供していただければ、適合する具体的な例を示すことができます。
編集:コンポーネントから「上」に行くことを示すには
var myComponent = // however you've got it
var theParentEl = myComponent.getEl().up('div.parentClass');
通常up('PARENTCLASS')
、あなたがやろうとしていることには十分です。これが私がコード全体で行っていることであり、要素はそれらが存在するフォームのイベントを生成します。
items: [
...
{ xtype: 'checkbox', listeners: {
change: function() { this.up('window').fireEvent('checkboxchanged'); }
}}
...
]
私が理解しているように、あなたは特に子コンポーネントのコントローラー制御機能からコンポーネントの親によってディスパッチされたイベントを聞きたいと思っています。
子コントローラーの制御関数に入れて親イベントをリッスンできる「parent<component」のようなクエリセレクターはありません。
通常、親ビューを子のコントローラーに追加するだけで、そのイベントを聞くことができます。しかし、別のコントローラーなどに委任しようとしているため、これを行っていないと思います。
親イベントが発生するたびに、子コンポーネントでイベントを発生させることができます。親コントローラー内では、次のように実行できます。
var child = parent.down('child');
child.fireEvent('myOwnEventName', arg1, arg2, arg3, etc);
次に、子コントローラーの制御関数に「myOwnEventName」のハンドラーを追加して、必要なロジックを実行します。
親にコントローラーがない場合は、親コンポーネントを子のコントローラーのビューとして追加する必要があります。
Sencha ヘルプには、「候補コンポーネントのメンバー式がテストされる場合があります。式が真の値を返す場合、候補コンポーネントはクエリに含まれます:」と書かれています: http://docs.sencha.com/ext-js/4 -0/#!/api/Ext.ComponentQueryヘルプ。
コントローラーで次のことができることに気付くのに少し時間がかかりました。
this.control({
'window{down("testcomp")}[down]': { beforedestroy: this.doNotCloseIfUnsaved }
});
{} 操作を使用すると、任意のコードを呼び出すことができます。 効率の観点からは本当に悪いですが、仕事は完了しました。[down] を追加する必要があったのは、コンポーネント クエリを右から左に実行するためです。そのため、(すべてのコンポーネントで) 実行する前に down() が存在することを確認する必要があります。したがって、コンポーネントを保持するウィンドウにイベントをアタッチすることができました。
もちろん、下のどこかではなく直接の子であることを確認したい場合は、down() の代わりに child() など、他の関数も使用できます。