UNPKG

migi

Version:

A JavaScript MVVM on JSX

138 lines (125 loc) 4.11 kB
define(function(require, exports, module){'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Event = function () { function Event() { _classCallCheck(this, Event); this.__hash = {}; } _createClass(Event, [{ key: 'on', value: function on(id, handle) { var self = this; if (Array.isArray(id)) { for (var i = 0, len = id.length; i < len; i++) { self.on(id[i], handle); } } else if (handle) { if (!self.__hash.hasOwnProperty(id)) { self.__hash[id] = []; } // 遍历防止此handle被侦听过了 for (var i = 0, item = self.__hash[id], len = item.length; i < len; i++) { if (item[i] === handle) { return self; } } self.__hash[id].push(handle); } return self; } }, { key: 'once', value: function once(id, handle) { var self = this; function cb() { for (var _len = arguments.length, data = Array(_len), _key = 0; _key < _len; _key++) { data[_key] = arguments[_key]; } handle.apply(self, data); self.off(id, cb); } if (Array.isArray(id)) { for (var i = 0, len = id.length; i < len; i++) { self.once(id[i], handle); } } else if (handle) { self.on(id, cb); } return this; } }, { key: 'off', value: function off(id, handle) { var self = this; if (Array.isArray(id)) { for (var i = 0, len = id.length; i < len; i++) { self.off(id[i], handle); } } else if (self.__hash.hasOwnProperty(id)) { if (handle) { for (var i = 0, item = self.__hash[id], len = item.length; i < len; i++) { if (item[i] === handle) { item.splice(i, 1); break; } } } // 未定义为全部清除 else { delete self.__hash[id]; } } return this; } }, { key: 'emit', value: function emit(id) { var self = this; for (var _len2 = arguments.length, data = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { data[_key2 - 1] = arguments[_key2]; } if (Array.isArray(id)) { for (var i = 0, len = id.length; i < len; i++) { self.emit(id[i], data); } } else { if (self.__hash.hasOwnProperty(id)) { var list = self.__hash[id]; if (list.length) { list = list.slice(); for (var i = 0, len = list.length; i < len; i++) { list[i].apply(self, data); } } } } return this; } }], [{ key: 'mix', value: function mix() { for (var _len3 = arguments.length, obj = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { obj[_key3] = arguments[_key3]; } for (var i = obj.length - 1; i >= 0; i--) { var o = obj[i]; var event = new Event(); o.__hash = {}; var fns = ['on', 'once', 'off', 'emit']; for (var j = fns.length - 1; j >= 0; j--) { var fn = fns[j]; o[fn] = event[fn]; } } } }]); return Event; }(); Event.DOM = 'DOM'; Event.DESTROY = 'DESTROY'; Event.DATA = 'DATA'; exports.default = Event;});