UNPKG

2.97 kBJavaScriptView Raw
1/**
2 * Module : kero dataTable events
3 * Author : liuyk(liuyk@yonyou.com)
4 * Date : 2016-07-30 14:34:01
5 */
6
7/**
8 * 绑定事件
9 * 支持的格式: 1. on(u.DataTable.ON_ROW_FOCUS, function() {}) // 普通
10 * 2. on([u.DataTable.ON_INSERT, u.DataTable.ON_DELETE], function() {}) // 数组
11 * 3. on({u.DataTable.ON_INSERT: function() {}, u.DataTable.ON_DELETE: function() {}}) // map
12 */
13const on = function (name, callback, one) {
14 var self = this, origCb = callback;
15 if(Object.prototype.toString.call(name) == '[object Array]') {
16 // 数组
17 for(var i in name) {
18 this.on(name[i], callback);
19 }
20 return this;
21 } else if(typeof name == 'object'){
22 // map
23 for(var key in name) {
24 this.on(key, name[key]);
25 }
26 return this;
27 }
28 if(one) {
29 callback = function() {
30 self.off(name, callback);
31 origCb.apply(this, arguments);
32 }
33 }
34 name = name.toLowerCase();
35 this._events || (this._events = {});
36 var events = this._events[name] || (this._events[name] = []);
37 events.push({
38 callback: callback
39 })
40 return this;
41}
42
43/**
44 * 解绑事件
45 *
46**/
47const off = function (name, callback) {
48 if(Object.prototype.toString.call(name) == '[object Array]') {
49 // 数组
50 for(var i in name) {
51 this.off(name[i], callback);
52 }
53 return this;
54 } else if(typeof name == 'object'){
55 // map
56 for(var key in name) {
57 this.off(key, name[key]);
58 }
59 return this;
60 }
61 var cbs = this._events[name];
62 if(!cbs) return this;
63 if(!callback) {
64 // 解绑所有事件
65 cbs = null;
66 } else {
67 for(var i = cbs.length - 1;i >= 0; i--) {
68 if(cbs[i] == callback) {
69 cbs.splice(i, 1);
70 }
71 }
72 }
73 return this;
74}
75
76/**
77 *
78**/
79const one = function (name, callback) {
80 this.on(name, callback, 1);
81}
82
83/**
84 * 触发事件
85 */
86const trigger = function (name) {
87 name = name.toLowerCase()
88 if (!this._events || !this._events[name]) return this;
89 var args = Array.prototype.slice.call(arguments, 1);
90 var events = this._events[name];
91 for (var i = 0, count = events.length; i < count; i++) {
92 events[i].callback.apply(this, args);
93 }
94 return this;
95}
96
97const triggerReturn = function(name){
98 name = name.toLowerCase()
99 if (!this._events || !this._events[name]) return this;
100 var args = Array.prototype.slice.call(arguments, 1);
101 var events = this._events[name];
102 var flag = true;
103 for (var i = 0, count = events.length; i < count; i++) {
104 flag = flag && events[i].callback.apply(this, args);
105 }
106 return flag;
107}
108
109
110const getEvent = function (name) {
111 name = name.toLowerCase()
112 this._events || (this._events = {})
113 return this._events[name]
114}
115
116export {
117 on,
118 off,
119 one,
120 trigger,
121 triggerReturn,
122 getEvent
123}
\No newline at end of file