Ext.js - Benutzerdefinierte Ereignisse und Listener
Ereignisse werden ausgelöst, wenn der Klasse etwas passiert. Zum Beispiel, wenn auf eine Schaltfläche geklickt wird oder bevor / nachdem das Element gerendert wurde.
Methoden zum Schreiben von Ereignissen
- Integrierte Ereignisse mit Listenern
- Ereignisse später anhängen
- Benutzerdefinierte Ereignisse
Integrierte Ereignisse mit Listenern
Ext JS bietet Listener-Eigenschaften zum Schreiben von Ereignissen und benutzerdefinierten Ereignissen in Ext JS-Dateien.
Writing listener in Ext JS
Wir werden den Listener im vorherigen Programm selbst hinzufügen, indem wir dem Panel eine Listen-Eigenschaft hinzufügen.
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/classic/theme-neptune/resources/theme-neptune-all.css"
rel = "stylesheet" />
<script type = "text/javascript"
src = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/ext-all.js"></script>
<script type = "text/javascript">
Ext.onReady(function() {
Ext.create('Ext.Button', {
renderTo: Ext.getElementById('helloWorldPanel'),
text: 'My Button',
listeners: {
click: function() {
Ext.MessageBox.alert('Alert box', 'Button is clicked');
}
}
});
});
</script>
</head>
<body>
<p> Please click the button to see event listener </p>
<div id = 'helloWorldPanel' /> <!-- panel will be rendered here-- >
</body>
</html>
Das obige Programm führt zu folgendem Ergebnis:
Auf diese Weise können wir auch mehrere Ereignisse in die Listener-Eigenschaft schreiben.
Multiple Events in the Same Listener
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/classic/theme-neptune/resources/theme-neptune-all.css"
rel = "stylesheet" />
<script type = "text/javascript"
src = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/ext-all.js"></script>
<script type = "text/javascript">
Ext.onReady(function() {
Ext.get('tag2').hide()
Ext.create('Ext.Button', {
renderTo: Ext.getElementById('helloWorldPanel'),
text: 'My Button',
listeners: {
click: function() {
this.hide();
},
hide: function() {
Ext.get('tag1').hide();
Ext.get('tag2').show();
}
}
});
});
</script>
</head>
<body>
<div id = "tag1">Please click the button to see event listener.</div>
<div id = "tag2">The button was clicked and now it is hidden.</div>
<div id = 'helloWorldPanel' /> <!-- panel will be rendered here-- >
</body>
</html>
Ein Ereignis später anhängen
In der vorherigen Methode zum Schreiben von Ereignissen haben wir Ereignisse zum Zeitpunkt der Erstellung von Elementen in Listener geschrieben. Die andere Möglichkeit besteht darin, Ereignisse anzuhängen.
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/classic/theme-neptune/resources/theme-neptune-all.css"
rel = "stylesheet" />
<script type = "text/javascript"
src = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/ext-all.js"></script>
<script type = "text/javascript">
Ext.onReady(function() {
var button = Ext.create('Ext.Button', {
renderTo: Ext.getElementById('helloWorldPanel'),
text: 'My Button'
});
// This way we can attach event to the button after the button is created.
button.on('click', function() {
Ext.MessageBox.alert('Alert box', 'Button is clicked');
});
});
</script>
</head>
<body>
<p> Please click the button to see event listener </p>
<div id = 'helloWorldPanel' /> <!-- panel will be rendered here-- >
</body>
</html>
Das obige Programm führt zu folgendem Ergebnis:
Benutzerdefinierte Ereignisse
Wir können benutzerdefinierte Ereignisse in Ext JS schreiben und die Ereignisse mit der fireEvent-Methode auslösen. Im folgenden Beispiel wird erläutert, wie Sie benutzerdefinierte Ereignisse schreiben.
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/classic/theme-neptune/resources/theme-neptune-all.css"
rel = "stylesheet" />
<script type = "text/javascript"
src = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/ext-all.js"></script>
<script type = "text/javascript">
Ext.onReady(function() {
var button = Ext.create('Ext.Button', {
renderTo: Ext.getElementById('helloWorldPanel'),
text: 'My Button',
listeners: {
myEvent: function(button) {
Ext.MessageBox.alert('Alert box', 'My custom event is called');
}
}
});
Ext.defer(function() {
button.fireEvent('myEvent');
}, 5000);
});
</script>
</head>
<body>
<p> The event will be called after 5 seconds when the page is loaded. </p>
<div id = 'helloWorldPanel' /> <!-- panel will be rendered here-- >
</body>
</html>
Sobald die Seite geladen und das Dokument fertig ist, wird die UI-Seite mit einer Schaltfläche angezeigt. Wenn wir nach 5 Sekunden ein Ereignis auslösen, ist das Dokument fertig. Das Warnfeld wird nach 5 Sekunden angezeigt.
Hier haben wir das benutzerdefinierte Ereignis 'myEvent' geschrieben und lösen Ereignisse als button.fireEvent (eventName) aus.