まず、DOM要素のイベント処理について説明します。
DOMノードのイベント処理
まず、DOMノードを直接操作する必要はありません。代わりに、おそらくExt.Elementインターフェイスを利用したいと思うでしょう。イベントハンドラーを割り当てる目的でElement.addListener、Element.on(これらは同等です)が作成されました。したがって、たとえば、htmlがある場合:
<div id="test_node"></div>
clickイベントハンドラーを追加します。
取得してみましょうElement:
var el = Ext.get('test_node');
次に、ドキュメントでclickイベントを確認します。そのハンドラーには3つのパラメーターがあります。
click(Ext.EventObject e、HTMLElement t、Object eOpts)
ハンドラーを割り当てることができるこのすべてを知っている:
// event name event handler
el.on( 'click' , function(e, t, eOpts){
// handling event here
});
ウィジェットのイベント処理
ウィジェットのイベント処理は、DOMノードのイベント処理とよく似ています。
まず、ウィジェットのイベント処理は、Ext.util.Observableミックスインを利用して実現されています。イベントを適切に処理するには、ウィジェットがExt.util.Observableミックスインとして含まれている必要があります。すべての組み込みウィジェット(パネル、フォーム、ツリー、グリッドなど)はExt.util.Observable、デフォルトでミックスインとして持っています。
ウィジェットの場合、ハンドラーを割り当てる方法は2つあります。1つ目は、メソッド(またはaddListener)で使用することです。たとえばButtonウィジェットを作成して、それにclickイベントを割り当てましょう。まず、イベントのドキュメントでハンドラーの引数を確認する必要があります。
click(Ext.button.Button this、Event e、Object eOpts)
今使用してみましょうon:
var myButton = Ext.create('Ext.button.Button', {
text: 'Test button'
});
myButton.on('click', function(btn, e, eOpts) {
// event handling here
console.log(btn, e, eOpts);
});
2番目の方法は、ウィジェットのリスナー構成を使用することです。
var myButton = Ext.create('Ext.button.Button', {
text: 'Test button',
listeners : {
click: function(btn, e, eOpts) {
// event handling here
console.log(btn, e, eOpts);
}
}
});
Buttonウィジェットは特別な種類のウィジェットであることに注意してください。クリックイベントは、handlerconfig を使用してこのウィジェットに割り当てることができます。
var myButton = Ext.create('Ext.button.Button', {
text: 'Test button',
handler : function(btn, e, eOpts) {
// event handling here
console.log(btn, e, eOpts);
}
});
カスタムイベントの発生
最初に、addEventsメソッドを使用してイベントを登録する必要があります。
myButton.addEvents('myspecialevent1', 'myspecialevent2', 'myspecialevent3', /* ... */);
addEventsメソッドの使用はオプションです。このメソッドへのコメントによると、このメソッドを使用する必要はありませんが、イベントドキュメントの場所を提供します。
イベントを発生させるには、fireEventメソッドを使用します。
myButton.fireEvent('myspecialevent1', arg1, arg2, arg3, /* ... */);
arg1, arg2, arg3, /* ... */ハンドラーに渡されます。これで、イベントを処理できます。
myButton.on('myspecialevent1', function(arg1, arg2, arg3, /* ... */) {
// event handling here
console.log(arg1, arg2, arg3, /* ... */);
});
新しいウィジェットを定義する場合、addEventsメソッド呼び出しを挿入するのに最適な場所はウィジェットのinitComponentメソッドであることに言及する価値があります。
Ext.define('MyCustomButton', {
extend: 'Ext.button.Button',
// ... other configs,
initComponent: function(){
this.addEvents('myspecialevent1', 'myspecialevent2', 'myspecialevent3', /* ... */);
// ...
this.callParent(arguments);
}
});
var myButton = Ext.create('MyCustomButton', { /* configs */ });
イベントのバブリングの防止
バブリングを防ぐために、あなたはできるreturn falseか使用しますExt.EventObject.preventDefault()。ブラウザのデフォルトアクションを防ぐには、を使用しますExt.EventObject.stopPropagation()。
たとえば、クリックイベントハンドラーをボタンに割り当てましょう。左ボタンがクリックされていない場合は、デフォルトのブラウザアクションを防止します。
myButton.on('click', function(btn, e){
if (e.button !== 0)
e.preventDefault();
});