48 lines
1.2 KiB
JavaScript
Executable file
48 lines
1.2 KiB
JavaScript
Executable file
var EventMixin = {
|
||
|
||
/**
|
||
* Подписка на событие
|
||
* Использование:
|
||
* menu.on('select', function(item) { ... }
|
||
*/
|
||
on: function(eventName, handler) {
|
||
if (!this._eventHandlers) this._eventHandlers = {};
|
||
if (!this._eventHandlers[eventName]) {
|
||
this._eventHandlers[eventName] = [];
|
||
}
|
||
this._eventHandlers[eventName].push(handler);
|
||
},
|
||
|
||
/**
|
||
* Прекращение подписки
|
||
* menu.off('select', handler)
|
||
*/
|
||
off: function(eventName, handler) {
|
||
var handlers = this._eventHandlers && this._eventHandlers[eventName];
|
||
if (!handlers) return;
|
||
for(var i=0; i<handlers.length; i++) {
|
||
if (handlers[i] == handler) {
|
||
handlers.splice(i--, 1);
|
||
}
|
||
}
|
||
},
|
||
|
||
/**
|
||
* Генерация события с передачей данных
|
||
* this.trigger('select', item);
|
||
*/
|
||
trigger: function(eventName) {
|
||
|
||
if (!this._eventHandlers || !this._eventHandlers[eventName]) {
|
||
return; // обработчиков для события нет
|
||
}
|
||
|
||
// вызвать обработчики
|
||
var handlers = this._eventHandlers[eventName];
|
||
for (var i = 0; i < handlers.length; i++) {
|
||
handlers[i].apply(this, [].slice.call(arguments, 1));
|
||
}
|
||
|
||
}
|
||
};
|
||
|