Mari kita mulai dengan menjelaskan penanganan acara elemen DOM.
Penanganan event simpul DOM
Pertama-tama Anda tidak ingin bekerja dengan simpul DOM secara langsung. Sebaliknya Anda mungkin ingin memanfaatkan Ext.Element
antarmuka. Untuk tujuan menugaskan penangan acara, Element.addListener
dan Element.on
(ini adalah setara) dibuat. Jadi, misalnya, jika kita memiliki html:
<div id="test_node"></div>
dan kami ingin menambahkan click
pengendali acara.
Mari kita ambil Element
:
var el = Ext.get('test_node');
Sekarang mari kita periksa dokumen untuk click
acara. Handler-nya mungkin memiliki tiga parameter:
klik (Ext.EventObject e, HTMLElement t, Object eOpts)
Mengetahui semua hal ini dapat kami berikan penangan:
// event name event handler
el.on( 'click' , function(e, t, eOpts){
// handling event here
});
Penanganan acara widget
Penanganan acara widget sangat mirip dengan penanganan acara simpul DOM.
Pertama-tama, penanganan acara widget diwujudkan dengan menggunakan Ext.util.Observable
mixin. Untuk menangani acara dengan benar, widget Anda harus bersaing Ext.util.Observable
sebagai mixin. Semua widget Ext.util.Observable
bawaan (seperti Panel, Form, Tree, Grid, ...) telah sebagai mixin secara default.
Untuk widget ada dua cara menetapkan penangan. Yang pertama - digunakan pada metode (atau addListener
). Misalnya, buat Button
widget dan tetapkan click
acara untuknya. Pertama-tama Anda harus memeriksa dokumen acara untuk argumen penangan:
klik (Ext.button.Tombol ini, Event e, Object eOpts)
Sekarang mari kita gunakan 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);
});
Cara kedua adalah menggunakan konfigurasi pendengar 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);
}
}
});
Perhatikan bahwa Button
widget adalah jenis widget khusus. Acara klik dapat ditetapkan untuk widget ini dengan menggunakan handler
konfigurasi:
var myButton = Ext.create('Ext.button.Button', {
text: 'Test button',
handler : function(btn, e, eOpts) {
// event handling here
console.log(btn, e, eOpts);
}
});
Acara kustom diaktifkan
Pertama-tama Anda perlu mendaftarkan suatu acara menggunakan metode addEvents :
myButton.addEvents('myspecialevent1', 'myspecialevent2', 'myspecialevent3', /* ... */);
Menggunakan addEvents
metode ini opsional. Seperti komentar untuk metode ini mengatakan tidak perlu menggunakan metode ini tetapi menyediakan tempat untuk dokumentasi acara.
Untuk memecat acara Anda, gunakan metode fireEvent :
myButton.fireEvent('myspecialevent1', arg1, arg2, arg3, /* ... */);
arg1, arg2, arg3, /* ... */
akan diteruskan ke handler. Sekarang kami dapat menangani acara Anda:
myButton.on('myspecialevent1', function(arg1, arg2, arg3, /* ... */) {
// event handling here
console.log(arg1, arg2, arg3, /* ... */);
});
Perlu disebutkan bahwa tempat terbaik untuk memasukkan panggilan metode addEvents adalah metode widget initComponent
ketika Anda mendefinisikan widget baru:
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 */ });
Mencegah terjadinya gelembung
Untuk mencegah gelembung Anda bisa return false
atau gunakan Ext.EventObject.preventDefault()
. Untuk mencegah penggunaan tindakan default browser Ext.EventObject.stopPropagation()
.
Sebagai contoh, mari kita tetapkan event handler klik ke tombol kita. Dan jika tidak tombol kiri diklik mencegah tindakan browser default:
myButton.on('click', function(btn, e){
if (e.button !== 0)
e.preventDefault();
});