Cominciamo descrivendo la gestione degli eventi degli elementi DOM.
Gestione degli eventi del nodo DOM
Prima di tutto non vorrai lavorare direttamente con il nodo DOM. Invece probabilmente vorrai utilizzare l' Ext.Element
interfaccia. Ai fini dell'assegnazione dei gestori di eventi Element.addListener
e Element.on
(questi sono equivalenti) sono stati creati. Quindi, ad esempio, se abbiamo HTML:
<div id="test_node"></div>
e vogliamo aggiungere il click
gestore eventi.
Recuperiamo Element
:
var el = Ext.get('test_node');
Ora controlliamo i documenti per l' click
evento. Il gestore può avere tre parametri:
fare clic su (Ext.EventObject e, HTMLElement t, Object eOpts)
Conoscendo tutto ciò che possiamo assegnare al gestore:
// event name event handler
el.on( 'click' , function(e, t, eOpts){
// handling event here
});
Gestione degli eventi dei widget
La gestione degli eventi dei widget è molto simile alla gestione degli eventi dei nodi DOM.
Innanzitutto, la gestione degli eventi dei widget viene realizzata utilizzando il Ext.util.Observable
mixin. Per gestire correttamente gli eventi, il tuo widget deve essere considerato Ext.util.Observable
come un mixin. Tutti i widget integrati (come Pannello, Modulo, Albero, Griglia, ...) hanno Ext.util.Observable
come impostazione predefinita un mixin.
Per i widget ci sono due modi per assegnare i gestori. Il primo - è usare il metodo (o addListener
). Creiamo ad esempio un Button
widget e assegniamo un click
evento ad esso. Prima di tutto dovresti controllare i documenti dell'evento per gli argomenti del gestore:
fare clic su (pulsante Ext.button, Event e, Object eOpts)
Ora usiamo 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);
});
Il secondo modo è usare la configurazione dei listener dei 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);
}
}
});
Si noti che il Button
widget è un tipo speciale di widget. L'evento Click può essere assegnato a questo widget usando 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);
}
});
Attivazione di eventi personalizzati
Prima di tutto devi registrare un evento usando il metodo addEvents :
myButton.addEvents('myspecialevent1', 'myspecialevent2', 'myspecialevent3', /* ... */);
L'uso del addEvents
metodo è facoltativo. Come dicono i commenti a questo metodo, non è necessario utilizzare questo metodo, ma fornisce spazio per la documentazione degli eventi.
Per generare il tuo evento usa il metodo fireEvent :
myButton.fireEvent('myspecialevent1', arg1, arg2, arg3, /* ... */);
arg1, arg2, arg3, /* ... */
sarà passato al gestore. Ora possiamo gestire il tuo evento:
myButton.on('myspecialevent1', function(arg1, arg2, arg3, /* ... */) {
// event handling here
console.log(arg1, arg2, arg3, /* ... */);
});
Vale la pena ricordare che il posto migliore per inserire la chiamata al metodo addEvents è il initComponent
metodo del widget quando si definiscono nuovi widget:
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 */ });
Prevenire il gorgoglio degli eventi
Per evitare il gorgoglio è possibile return false
o utilizzare Ext.EventObject.preventDefault()
. Per impedire l'uso dell'azione predefinita del browser Ext.EventObject.stopPropagation()
.
Ad esempio, assegniamo il gestore dell'evento click al nostro pulsante. E se non si fa clic sul pulsante sinistro, impedire l'azione predefinita del browser:
myButton.on('click', function(btn, e){
if (e.button !== 0)
e.preventDefault();
});