まず、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
ウィジェットは特別な種類のウィジェットであることに注意してください。クリックイベントは、handler
config を使用してこのウィジェットに割り当てることができます。
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();
});