Vamos começar descrevendo a manipulação de eventos dos elementos DOM.
Tratamento de eventos do nó DOM
Antes de tudo, você não gostaria de trabalhar diretamente com o nó DOM. Em vez disso, você provavelmente desejaria utilizar a Ext.Element
interface. Com o objetivo de atribuir manipuladores de eventos, Element.addListener
e Element.on
(estes são equivalentes) foram criados. Então, por exemplo, se tivermos html:
<div id="test_node"></div>
e queremos adicionar click
manipulador de eventos.
Vamos recuperar Element
:
var el = Ext.get('test_node');
Agora vamos verificar a documentação para o click
evento. Seu manipulador pode ter três parâmetros:
clique em (Ext.EventObject e, HTMLElement t, Object eOpts)
Conhecendo tudo isso, podemos atribuir manipulador:
// event name event handler
el.on( 'click' , function(e, t, eOpts){
// handling event here
});
Manipulação de evento de widgets
A manipulação de eventos de widgets é muito semelhante à manipulação de eventos de nós DOM.
Primeiro, a manipulação de eventos dos widgets é realizada utilizando o Ext.util.Observable
mixin. Para lidar com os eventos corretamente, seu widget deve conter Ext.util.Observable
um mixin. Todos os widgets integrados (como Painel, Formulário, Árvore, Grade, ...) têm Ext.util.Observable
como combinação por padrão.
Para widgets, existem duas maneiras de atribuir manipuladores. O primeiro - é usar no método (ou addListener
). Vamos, por exemplo, criar um Button
widget e atribuir um click
evento a ele. Antes de tudo, verifique os documentos do evento para obter os argumentos do manipulador:
clique (botão Ext.Button this, Event e, Object eOpts)
Agora vamos usar 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);
});
A segunda maneira é usar a configuração de listeners do 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);
}
}
});
Observe que o Button
widget é um tipo especial de widget. O evento Click pode ser atribuído 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);
}
});
Disparo de eventos personalizados
Antes de tudo, você precisa registrar um evento usando o método addEvents :
myButton.addEvents('myspecialevent1', 'myspecialevent2', 'myspecialevent3', /* ... */);
O uso do addEvents
método é opcional. Conforme comentam esse método, não há necessidade de usar esse método, mas fornece lugar para a documentação dos eventos.
Para disparar seu evento, use o método fireEvent :
myButton.fireEvent('myspecialevent1', arg1, arg2, arg3, /* ... */);
arg1, arg2, arg3, /* ... */
será passado para o manipulador. Agora podemos lidar com seu evento:
myButton.on('myspecialevent1', function(arg1, arg2, arg3, /* ... */) {
// event handling here
console.log(arg1, arg2, arg3, /* ... */);
});
Vale ressaltar que o melhor local para inserir a chamada do método addEvents é o initComponent
método do widget quando você está definindo um novo 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 */ });
Evitando bolhas de eventos
Para evitar bolhas, você pode return false
ou usar Ext.EventObject.preventDefault()
. Para impedir a ação padrão do navegador, use Ext.EventObject.stopPropagation()
.
Por exemplo, vamos atribuir o manipulador de eventos click ao nosso botão. E se não clicar no botão esquerdo, impeça a ação padrão do navegador:
myButton.on('click', function(btn, e){
if (e.button !== 0)
e.preventDefault();
});