У нас стоит задача создать ExtJS объект без применения наследования от Ext.Base или Ext.Component и чтобы можно было использовать события.
Для реализации данной задачи нам поможет объект Ext.mixin.Observable
Пример инициализации класса:
Ext.define('Employee', { mixins:['Ext.mixin.Observable'], config: { name: '' }, constructor: function(config) { // вот тут вот и вся магия! this.mixins.observable.constructor.call(this, config); }, callFire: function(){ this.fireEvent('fire'); } });
Пример вызова:
Ext.create('Employee', { listeners:{ fire: function(){ alert(0); } } }).callFire(); // вызываем метод для события
Удаление событий:
var listeners = cmp.on({ scope: cmp, render: cmp.onRender }); listeners.destroy(); // или cmp.un({ scope: cmp, render: cmp.onRender });
Параметры в listeners:
... listeners: { // это опции scope: this, ... } ...
- scope: any — контекст обработки
- single: true — событие будет вызвано только один раз
- buffer: number — ограничение по количеству возникновения событий
- element: string — имена контейнера для прослушивания (body, element, и т.д.)
Транзитные события
this.relayEvents(this.getStore(), ['load']); this.storeRelayers = this.relayEvents(this.getStore(), ['load', 'clear'], 'store'); Ext.destroy(this.storeRelayers);