Hãy bắt đầu bằng cách mô tả xử lý sự kiện của các phần tử DOM.
Xử lý sự kiện nút DOM
Trước hết bạn sẽ không muốn làm việc trực tiếp với nút DOM. Thay vào đó bạn có thể muốn sử dụng Ext.Element
giao diện. Với mục đích gán các trình xử lý sự kiện Element.addListener
và Element.on
(chúng tương đương) đã được tạo. Vì vậy, ví dụ, nếu chúng ta có html:
<div id="test_node"></div>
và chúng tôi muốn thêm click
xử lý sự kiện.
Hãy lấy lại Element
:
var el = Ext.get('test_node');
Bây giờ hãy kiểm tra tài liệu cho click
sự kiện. Trình xử lý của nó có thể có ba tham số:
nhấp (Ext.EventObject e, HTMLEuity t, Object eOpts)
Biết tất cả những thứ này, chúng ta có thể gán xử lý:
// event name event handler
el.on( 'click' , function(e, t, eOpts){
// handling event here
});
Xử lý sự kiện Widgets
Xử lý sự kiện Widgets khá giống với xử lý sự kiện các nút DOM.
Trước hết, xử lý sự kiện widget được thực hiện bằng cách sử dụng Ext.util.Observable
mixin. Để xử lý các sự kiện đúng cách, tiện ích của bạn phải chống lại Ext.util.Observable
như một mixin. Tất cả các tiện ích tích hợp (như Bảng điều khiển, Biểu mẫu, Cây, Lưới, ...) Ext.util.Observable
theo mặc định là một hỗn hợp.
Đối với các widget có hai cách gán trình xử lý. Cách thứ nhất - là sử dụng trên phương thức (hoặc addListener
). Ví dụ, hãy tạo Button
widget và gán click
sự kiện cho nó. Trước hết, bạn nên kiểm tra tài liệu của sự kiện để biết các đối số của trình xử lý:
nhấp (Ext.button.Button this, Event e, Object eOpts)
Bây giờ hãy sử dụng 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);
});
Cách thứ hai là sử dụng cấu hình trình nghe của widget :
var myButton = Ext.create('Ext.button.Button', {
text: 'Test button',
listeners : {
click: function(btn, e, eOpts) {
// event handling here
console.log(btn, e, eOpts);
}
}
});
Lưu ý rằng Button
widget là một loại vật dụng đặc biệt. Nhấp vào sự kiện có thể được chỉ định cho tiện ích này bằng cách sử dụng handler
cấu hình:
var myButton = Ext.create('Ext.button.Button', {
text: 'Test button',
handler : function(btn, e, eOpts) {
// event handling here
console.log(btn, e, eOpts);
}
});
Sự kiện tùy chỉnh bắn
Trước hết bạn cần đăng ký một sự kiện bằng phương thức addEvents :
myButton.addEvents('myspecialevent1', 'myspecialevent2', 'myspecialevent3', /* ... */);
Sử dụng addEvents
phương pháp là tùy chọn. Như các bình luận cho phương pháp này nói rằng không cần sử dụng phương pháp này nhưng nó cung cấp chỗ cho tài liệu sự kiện.
Để khởi động sự kiện của bạn, hãy sử dụng phương thức fireEvent :
myButton.fireEvent('myspecialevent1', arg1, arg2, arg3, /* ... */);
arg1, arg2, arg3, /* ... */
sẽ được chuyển vào xử lý. Bây giờ chúng tôi có thể xử lý sự kiện của bạn:
myButton.on('myspecialevent1', function(arg1, arg2, arg3, /* ... */) {
// event handling here
console.log(arg1, arg2, arg3, /* ... */);
});
Điều đáng nói là vị trí tốt nhất để chèn lệnh gọi phương thức addEvents là initComponent
phương thức của widget khi bạn đang xác định widget mới:
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 */ });
Ngăn chặn sự kiện sủi bọt
Để ngăn chặn bong bóng, bạn có thể return false
hoặc sử dụng Ext.EventObject.preventDefault()
. Để ngăn chặn hành động sử dụng mặc định của trình duyệt Ext.EventObject.stopPropagation()
.
Ví dụ: hãy gán trình xử lý sự kiện nhấp vào nút của chúng tôi. Và nếu không nhấp vào nút bên trái, ngăn hành động mặc định của trình duyệt:
myButton.on('click', function(btn, e){
if (e.button !== 0)
e.preventDefault();
});