Simple events system

An example showing how simple events system on your device with Tizen 2.3.
Events = function() {};

Events.prototype = {
  on: function(eventName, eventHandler) {
    this._events = this._events || {};

    eventName = eventName.toLowerCase();

    this._events[eventName] = this._events[eventName] || [];

    // Add event only if it's not already on the events list.
    if (this._events[eventName].indexOf(eventHandler) === -1) {
      this._events[eventName].push(eventHandler);
    }
  },

  off: function(eventName, eventHandler) {
    this._events = this._events || {};

    if (arguments.length === 1) {
      // Remove all event handlers for given event name.
      delete this._events[eventName];
    } else if (arguments.length === 2) {
      if (!(this._events[eventName] instanceof Array)) {
        return;
      }
      // Remove only one event handler (the passed one) from the events list.
      var index = this._events[eventName].indexOf(eventHandler);
      if (index >= 0) {
        this._events[eventName].splice(index, 1);
      }
    }
  },

  emit: function(eventName) {
    this._events = this._events || {};

    this._events[eventName].forEach(function(eventHandler) {
      eventHandler();
    });
  }
};

Events.mixin = function(obj) {
  if (obj instanceof Function) {
    for (var methodName in Events.prototype) {
      obj.prototype[methodName] = Events.prototype[methodName];
    }
  } else {
    for (var methodName in Events.prototype) {
      obj[methodName] = Events.prototype[methodName];
    }
  }
};

// Usage
var obj = {};
Events.mixin(obj);
obj.on('eventName', function() {
  alert('event!');
});
obj.emit('eventName');

// Or
var Class = function() {
};
Events.mixin(Class);
var obj = new Class();
obj.on('eventName', function() {
  alert('event!');
});
obj.emit('eventName');

Responses

0 Replies