extjs 4.1を学習していますが、ほとんどのコンポーネントでクリックイベントが見つかりません-ブラインドであるか、ボタン以外のコンポーネントのクリックに反応できませんか?
理由は何ですか?HTMLは、すべての要素のクリックをサポートしています。
すべてのコンポーネントは、要素レベルでクリックイベントを公開できます。のような一部のコンポーネントにExt.button.Button
は、コンポーネントレベルでクリックイベントがあります。
パネルにクリックイベントを追加する良い方法は次のとおりです。
new Ext.panel.Panel({
listeners: {
click: this.handlePanelClick,
element: 'el'
}
});
コメントに返信するために編集する
要素文字列は、コンポーネントのプロパティである任意の要素です。
new Ext.panel.Panel({
listeners: {
click: function() {
alert('you clicked the body');
},
element: 'body'
}
});
Extドキュメントにはより詳細な説明がありますhttp://docs.sencha.com/ext-js/4-1/#!/api/Ext.util.Observable-method-addListener
レンダリングされた後、ほとんどすべての表示コンポーネントに含まれるExt.dom.Elementオブジェクトにアクセスすることで、DOMイベントを非常に簡単に追加できます。
必要なイベントをdomオブジェクトに追加するリスナーをafterrender
イベントに追加するだけです。
Ext.create('Ext.panel.Panel', {
// other panel configs ...
listeners: {
'afterrender': function(panel) {
panel.el.on('click', function() {
alert('clicked');
});
}
}
});
Ext.util.Observableを拡張するクラスのすべてのコンポーネント(すべての表示されているコンポーネント)に対してそれを行う方法もあると思います。私は前にそれをしたことがないので、あなたはそれで遊んでいなければならないでしょう。
自己参照マネージドリスナー(最もクリーンなimo)の使用:
Ext.create('Ext.panel.Panel', {
listeners: {
'afterrender': function(panel) {
this.mon(this.getEl(), 'click', this.onClick, this)
}
},
onClick: function() {
alert("mmm mon mon mon");
}
});
クリックイベントのみを聴いている場合は、これを行うこともできます
xtype: 'container',
listeners: {
el: {
click: function() {
alert('I clicked');
},
scope: this
}
}
Ext.dom.Elementが起動しないイベントをリッスンする必要がある場合は、他の人が提案しているように、「render」リスナーにアタッチする必要があります。