让我们从描述 DOM 元素的事件处理开始。
DOM 节点事件处理
首先,您不希望直接使用DOM节点。相反,您可能希望使用Ext.Element
接口。为了分配事件处理程序,创建了 Element.addListener
和 Element.on
(它们是等效的)。因此,例如,如果我们有html:
<div id="test_node"></div>
我们想要添加事件处理程序。
让我们检索:click
Element
var el = Ext.get('test_node');
现在,让我们检查文档中的点击
事件。它的处理程序可能有三个参数:
click( Ext.EventObject e, HTMLElement t, Object eOpts )
知道了所有这些东西,我们可以分配处理程序:
// event name event handler
el.on( 'click' , function(e, t, eOpts){
// handling event here
});
小部件事件处理
Widgets事件处理与DOM节点事件处理非常相似。
首先,小部件事件处理是通过利用Ext.util.Observable
mixin来实现的。为了正确处理事件,您的小部件必须包含作为 mixin。默认情况下,所有内置小部件(如面板,窗体,树,网格等)都作为mixin。Ext.util.Observable
Ext.util.Observable
对于小部件,有两种分配处理程序的方法。第一个 - 是在方法(或)上使用。例如,让我们创建小部件并为其分配事件。首先,您应该检查事件的文档以获取处理程序的参数:addListener
Button
click
单击( Ext.button.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);
});
第二种方法是使用小部件的侦听器配置:
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
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, /* ... */);
});
值得一提的是,在定义新 widget 时,插入 addEvents 方法调用的最佳位置是 widget 的方法: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 */ });
防止事件冒泡
为了防止冒泡,你可以使用 Ext.EventObject.preventDefault()
。为了防止浏览器的默认操作,请使用 Ext.EventObject.stopPropagation()
。return false
例如,让我们将单击事件处理程序分配给按钮。如果没有单击左键,则阻止默认浏览器操作:
myButton.on('click', function(btn, e){
if (e.button !== 0)
e.preventDefault();
});