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.Elementantarmuka. Untuk tujuan menugaskan penangan acara, Element.addListenerdan Element.on(ini adalah setara) dibuat. Jadi, misalnya, jika kita memiliki html:
<div id="test_node"></div>
dan kami ingin menambahkan clickpengendali acara.
Mari kita ambil Element:
var el = Ext.get('test_node');
Sekarang mari kita periksa dokumen untuk clickacara. 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.Observablemixin. Untuk menangani acara dengan benar, widget Anda harus bersaing Ext.util.Observablesebagai mixin. Semua widget Ext.util.Observablebawaan (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 Buttonwidget dan tetapkan clickacara 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 Buttonwidget adalah jenis widget khusus. Acara klik dapat ditetapkan untuk widget ini dengan menggunakan handlerkonfigurasi:
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 addEventsmetode 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 initComponentketika 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 falseatau 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();
});