EventBase.prototype = {
/**
* 注册事件监听器
* @method addListener
* @param { String } types 监听的事件名称,同时监听多个事件使用空格分隔
* @param { Function } fn 监听的事件被触发时,会执行该回调函数
* @waining 事件被触发时,监听的函数假如返回的值恒等于true,回调函数的队列中后面的函数将不执行
* @example
* ```javascript
* editor.addListener('selectionchange',function(){
* console.log("选区已经变化!");
* })
* editor.addListener('beforegetcontent aftergetcontent',function(type){
* if(type == 'beforegetcontent'){
* //do something
* }else{
* //do something
* }
* console.log(this.getContent) // this是注册的事件的编辑器实例
* })
* ```
* @see UE.EventBase:fireEvent(String)
*/
addListener: function (types, listener) {
types = utils.trim(types).split(/\s+/);
for (var i = 0, ti; (ti = types[i++]);) {
getListener(this, ti, true).push(listener);
}
},
on: function (types, listener) {
return this.addListener(types, listener);
},
off: function (types, listener) {
return this.removeListener(types, listener);
},
trigger: function () {
return this.fireEvent.apply(this, arguments);
},
/**
* 移除事件监听器
* @method removeListener
* @param { String } types 移除的事件名称,同时移除多个事件使用空格分隔
* @param { Function } fn 移除监听事件的函数引用
* @example
* ```javascript
* //changeCallback为方法体
* editor.removeListener("selectionchange",changeCallback);
* ```
*/
removeListener: function (types, listener) {
types = utils.trim(types).split(/\s+/);
for (var i = 0, ti; (ti = types[i++]);) {
utils.removeItem(getListener(this, ti) || [], listener);
}
},
/**
* 触发事件
* @method fireEvent
* @param { String } types 触发的事件名称,同时触发多个事件使用空格分隔
* @remind 该方法会触发addListener
* @return { * } 返回触发事件的队列中,最后执行的回调函数的返回值
* @example
* ```javascript
* editor.fireEvent("selectionchange");
* ```
*/
/**
* 触发事件
* @method fireEvent
* @param { String } types 触发的事件名称,同时触发多个事件使用空格分隔
* @param { *... } options 可选参数,可以传入一个或多个参数,会传给事件触发的回调函数
* @return { * } 返回触发事件的队列中,最后执行的回调函数的返回值
* @example
* ```javascript
*
* editor.addListener( "selectionchange", function ( type, arg1, arg2 ) {
*
* console.log( arg1 + " " + arg2 );
*
* } );
*
* //触发selectionchange事件, 会执行上面的事件监听器
* //output: Hello World
* editor.fireEvent("selectionchange", "Hello", "World");
* ```
*/
fireEvent: function () {
var types = arguments[0];
types = utils.trim(types).split(" ");
for (var i = 0, ti; (ti = types[i++]);) {
var listeners = getListener(this, ti),
r,
t,
k;
if (listeners) {
k = listeners.length;
while (k--) {
if (!listeners[k]) continue;
t = listeners[k].apply(this, arguments);
if (t === true) {
return t;
}
if (t !== undefined) {
r = t;
}
}
}
if ((t = this["on" + ti.toLowerCase()])) {
r = t.apply(this, arguments);
}
}
return r;
}
};版权声明:本文为原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
关注微信公众号:"cq_xifan";