Beginnen wir mit der Beschreibung der Ereignisbehandlung von DOM-Elementen.
Behandlung von DOM-Knotenereignissen
Zunächst möchten Sie nicht direkt mit dem DOM-Knoten arbeiten. Stattdessen möchten Sie wahrscheinlich die Ext.Element
Schnittstelle verwenden. Zum Zuweisen von Ereignishandlern wurden Element.addListener
und Element.on
(diese sind gleichwertig) erstellt. Also zum Beispiel, wenn wir HTML haben:
<div id="test_node"></div>
und wir wollen click
Event-Handler hinzufügen .
Lassen Sie uns abrufen Element
:
var el = Ext.get('test_node');
Lassen Sie uns nun die Dokumente auf click
Ereignisse überprüfen . Der Handler kann drei Parameter haben:
Klicken Sie auf (Ext.EventObject e, HTMLElement t, Object eOpts).
Wenn wir all diese Dinge kennen, können wir den Handler zuweisen:
// event name event handler
el.on( 'click' , function(e, t, eOpts){
// handling event here
});
Widgets Ereignisbehandlung
Die Ereignisbehandlung von Widgets ist der Ereignisbehandlung von DOM-Knoten ziemlich ähnlich.
Zunächst wird die Ereignisbehandlung von Widgets Ext.util.Observable
mithilfe von Mixin realisiert . Um Ereignisse richtig zu behandeln, muss Ihr Widget Ext.util.Observable
als Mixin enthalten sein. Alle integrierten Widgets (wie Panel, Formular, Baum, Raster, ...) sind Ext.util.Observable
standardmäßig als Mixin enthalten.
Für Widgets gibt es zwei Möglichkeiten, Handler zuzuweisen. Die erste - ist auf Methode (oder addListener
) zu verwenden. Lassen Sie uns zum Beispiel ein Button
Widget erstellen und ihm ein click
Ereignis zuweisen . Zunächst sollten Sie die Dokumente des Ereignisses auf die Argumente des Handlers überprüfen:
Klicken Sie auf (Ext.button.Button this, Event e, Object eOpts).
Verwenden wir nun 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);
});
Die zweite Möglichkeit besteht darin, die Listener- Konfiguration des Widgets zu verwenden :
var myButton = Ext.create('Ext.button.Button', {
text: 'Test button',
listeners : {
click: function(btn, e, eOpts) {
// event handling here
console.log(btn, e, eOpts);
}
}
});
Beachten Sie, dass Button
Widget eine spezielle Art von Widgets ist. Klickereignis kann diesem Widget mithilfe von handler
config zugewiesen werden :
var myButton = Ext.create('Ext.button.Button', {
text: 'Test button',
handler : function(btn, e, eOpts) {
// event handling here
console.log(btn, e, eOpts);
}
});
Benutzerdefinierte Ereignisse werden ausgelöst
Zunächst müssen Sie ein Ereignis mit der Methode addEvents registrieren :
myButton.addEvents('myspecialevent1', 'myspecialevent2', 'myspecialevent3', /* ... */);
Die Verwendung der addEvents
Methode ist optional. Wie Kommentare zu dieser Methode besagen, muss diese Methode nicht verwendet werden, bietet jedoch Platz für die Dokumentation von Ereignissen.
Verwenden Sie die fireEvent- Methode, um Ihre Veranstaltung auszulösen :
myButton.fireEvent('myspecialevent1', arg1, arg2, arg3, /* ... */);
arg1, arg2, arg3, /* ... */
wird an den Handler übergeben. Jetzt können wir Ihre Veranstaltung abwickeln:
myButton.on('myspecialevent1', function(arg1, arg2, arg3, /* ... */) {
// event handling here
console.log(arg1, arg2, arg3, /* ... */);
});
Es ist erwähnenswert, dass der beste Ort zum Einfügen des addEvents- Methodenaufrufs die Widget- initComponent
Methode ist, wenn Sie ein neues Widget definieren:
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 */ });
Verhindern von Ereignisblasen
Um ein Sprudeln zu verhindern, können return false
oder verwenden Sie Ext.EventObject.preventDefault()
. Um die Standardaktion des Browsers zu verhindern, verwenden Sie Ext.EventObject.stopPropagation()
.
Weisen Sie beispielsweise unserer Schaltfläche einen Klickereignishandler zu. Wenn nicht auf die linke Schaltfläche geklickt wurde, wird die Standardaktion des Browsers verhindert:
myButton.on('click', function(btn, e){
if (e.button !== 0)
e.preventDefault();
});