From 9fbbdc90fa439b66c68c293ae1be05aca9d31ddd Mon Sep 17 00:00:00 2001 From: life Date: Sat, 21 Nov 2015 13:08:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A8=E5=B1=80=E4=BA=8B=E4=BB=B6=E6=9C=BA?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/js/app/api.js | 49 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/public/js/app/api.js b/public/js/app/api.js index ca46b042..082dfa58 100644 --- a/public/js/app/api.js +++ b/public/js/app/api.js @@ -176,4 +176,53 @@ var Api = { } }; +//------------- +// 全局事件机制 + +$.extend(Api, { + _eventCallbacks: {}, + _listen: function(type, callback) { + var callbacks = this._eventCallbacks[type] || (this._eventCallbacks[type] = []); + callbacks.push(callback); + }, + // on('a b', function(params) {}) + on: function(name, callback) { + var names = name.split(/\s+/); + for (var i = 0; i < names.length; ++i) { + this._listen(names[i], callback); + } + return this; + }, + // off('a b', function(params) {}) + off: function(name, callback) { + var types = name.split(/\s+/); + var i, j, callbacks, removeIndex; + for (i = 0; i < types.length; i++) { + callbacks = this._eventCallbacks[types[i].toLowerCase()]; + if (callbacks) { + removeIndex = null; + for (j = 0; j < callbacks.length; j++) { + if (callbacks[j] == callback) { + removeIndex = j; + } + } + if (removeIndex !== null) { + callbacks.splice(removeIndex, 1); + } + } + } + }, + // LEA.trigger('a', {}); + trigger: function(type, params) { + var callbacks = this._eventCallbacks[type] || []; + if (callbacks.length === 0) { + return; + } + for (var i = 0; i < callbacks.length; i++) { + callbacks[i].call(this, params); + } + } +}); + + Api._init(); \ No newline at end of file