eve.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /**
  2. * @fileOverview
  3. *
  4. * 简版事件解耦功能
  5. *
  6. * @author: techird
  7. * @copyright: Baidu FEX, 2014
  8. */
  9. KityMinder.registerUI('eve', function(minder) {
  10. return {
  11. setup: function(obj) {
  12. var callbacks = {};
  13. obj.on = function on(name, callback) {
  14. var list = callbacks[name] || (callbacks[name] = []);
  15. list.push(callback);
  16. return this;
  17. };
  18. obj.off = function off(name, callback) {
  19. var list = callbacks[name];
  20. if (list) {
  21. var index = list.indexOf(callback);
  22. if (~index) {
  23. list.splice(index, 1);
  24. } else {
  25. callback[name] = null;
  26. }
  27. }
  28. return this;
  29. };
  30. obj.once = function once(name, callback) {
  31. return this.on(name, function wrapped() {
  32. callback.apply(obj, arguments);
  33. obj.off(name, wrapped);
  34. });
  35. };
  36. obj.fire = function fire(name) {
  37. var list = callbacks[name];
  38. var args = [].slice.call(arguments, 1);
  39. if (list) list.forEach(function(callback) {
  40. callback.apply(obj, args);
  41. });
  42. return this;
  43. };
  44. return obj;
  45. }
  46. };
  47. });