Comencemos describiendo el manejo de eventos de los elementos DOM.
Manejo de eventos del nodo DOM
En primer lugar, no querrá trabajar con el nodo DOM directamente. En cambio, es probable que desee utilizar la Ext.Element
interfaz. Con el fin de asignar controladores de eventos, Element.addListener
y Element.on
(estos son equivalentes) fueron creados. Entonces, por ejemplo, si tenemos html:
<div id="test_node"></div>
y queremos agregar click
controlador de eventos.
Recuperemos Element
:
var el = Ext.get('test_node');
Ahora revisemos los documentos para el click
evento. Su controlador puede tener tres parámetros:
clic (Ext.EventObject e, HTMLElement t, Object eOpts)
Sabiendo todo esto, podemos asignar un controlador:
// event name event handler
el.on( 'click' , function(e, t, eOpts){
// handling event here
});
Manejo de eventos de widgets
El manejo de eventos de widgets es bastante similar al manejo de eventos de nodos DOM.
En primer lugar, el manejo de eventos de widgets se realiza utilizando Ext.util.Observable
mixin. Para manejar los eventos correctamente, su widget debe contactarse Ext.util.Observable
como un mixin. Todos los widgets integrados (como Panel, Formulario, Árbol, Cuadrícula, ...) tienen Ext.util.Observable
una combinación por defecto.
Para los widgets hay dos formas de asignar controladores. El primero es usar el método (o addListener
). Vamos a crear, por ejemplo, un Button
widget y asignarle un click
evento. En primer lugar, debe consultar los documentos del evento para ver los argumentos del manejador:
Haga clic en (botón ext., botón este, evento e, objetos e)
Ahora usemos 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);
});
La segunda forma es usar la configuración de escuchas del 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);
}
}
});
Tenga en cuenta que el Button
widget es un tipo especial de widgets. El evento de clic se puede asignar a este 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);
}
});
Eventos personalizados disparando
En primer lugar, debe registrar un evento utilizando el método addEvents :
myButton.addEvents('myspecialevent1', 'myspecialevent2', 'myspecialevent3', /* ... */);
Usar el addEvents
método es opcional. Como los comentarios a este método dicen que no hay necesidad de usar este método, pero proporciona lugar para la documentación de eventos.
Para activar su evento use el método fireEvent :
myButton.fireEvent('myspecialevent1', arg1, arg2, arg3, /* ... */);
arg1, arg2, arg3, /* ... */
será pasado al controlador. Ahora podemos manejar su evento:
myButton.on('myspecialevent1', function(arg1, arg2, arg3, /* ... */) {
// event handling here
console.log(arg1, arg2, arg3, /* ... */);
});
Vale la pena mencionar que el mejor lugar para insertar la llamada al método addEvents es el initComponent
método del widget cuando se define un nuevo 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 */ });
Prevenir eventos burbujeantes
Para evitar el burbujeo, puedes return false
o usar Ext.EventObject.preventDefault()
. Para evitar el uso de acción predeterminada del navegador Ext.EventObject.stopPropagation()
.
Por ejemplo, asignemos un controlador de eventos de clic a nuestro botón. Y si no se hizo clic en el botón izquierdo, evite la acción predeterminada del navegador:
myButton.on('click', function(btn, e){
if (e.button !== 0)
e.preventDefault();
});