• 自定义事件模块引擎


    define(function () {
        /**
         * Event listener (singleton)
         */
        // TODO: replace usage of the event listener for the EventBus
        var events = {
            'listeners': [],
    
            /**
             * Find a single listener by its object
             * @param {Object} object
             * @return {Number} index  -1 when not found
             */
            'indexOf': function (object) {
                var listeners = this.listeners;
                for (var i = 0, iMax = this.listeners.length; i < iMax; i++) {
                    var listener = listeners[i];
                    if (listener && listener.object == object) {
                        return i;
                    }
                }
                return -1;
            },
    
            /**
             * Add an event listener
             * @param {Object} object
             * @param {String} event       The name of an event, for example 'select'
             * @param {function} callback  The callback method, called when the
             *                             event takes place
             */
            'addListener': function (object, event, callback) {
                var index = this.indexOf(object);
                var listener = this.listeners[index];
                if (!listener) {
                    listener = {
                        'object': object,
                        'events': {}
                    };
                    this.listeners.push(listener);
                }
    
                var callbacks = listener.events[event];
                if (!callbacks) {
                    callbacks = [];
                    listener.events[event] = callbacks;
                }
    
                // add the callback if it does not yet exist
                if (callbacks.indexOf(callback) == -1) {
                    callbacks.push(callback);
                }
            },
    
            /**
             * Remove an event listener
             * @param {Object} object
             * @param {String} event       The name of an event, for example 'select'
             * @param {function} callback  The registered callback method
             */
            'removeListener': function (object, event, callback) {
                var index = this.indexOf(object);
                var listener = this.listeners[index];
                if (listener) {
                    var callbacks = listener.events[event];
                    if (callbacks) {
                        index = callbacks.indexOf(callback);
                        if (index != -1) {
                            callbacks.splice(index, 1);
                        }
    
                        // remove the array when empty
                        if (callbacks.length == 0) {
                            delete listener.events[event];
                        }
                    }
    
                    // count the number of registered events. remove listener when empty
                    var count = 0;
                    var events = listener.events;
                    for (var e in events) {
                        if (events.hasOwnProperty(e)) {
                            count++;
                        }
                    }
                    if (count == 0) {
                        delete this.listeners[index];
                    }
                }
            },
    
            /**
             * Remove all registered event listeners
             */
            'removeAllListeners': function () {
                this.listeners = [];
            },
    
            /**
             * Trigger an event. All registered event handlers will be called
             * @param {Object} object
             * @param {String} event
             * @param {Object} properties (optional)
             */
            'trigger': function (object, event, properties) {
                var index = this.indexOf(object);
                var listener = this.listeners[index];
                if (listener) {
                    var callbacks = listener.events[event];
                    if (callbacks) {
                        for (var i = 0, iMax = callbacks.length; i < iMax; i++) {
                            callbacks[i](properties);
                        }
                    }
                }
            }
        };
        return events;
    });

    以上是来自visjs的自定义事件模块,不知道为什么他们自己放着没用,看了一下非常实用,所以就直接拿过来用就可以。

  • 相关阅读:
    微信开发(5):公众号消息与事件推送处理(转)
    微信开发(4):微信第三方开放平台的搭建(转)
    微信开发(3):微信公众号发现金红包功能开发,利用第三方SDK实现(转)
    微信开发(2):微信js sdk分享朋友圈,朋友,获取config接口注入权限验证(转)
    微信开发(1) :网页授权获取用户的基本信息 实现微信登录(转)
    java实现创建临时文件然后在程序退出时自动删除文件(转)
    Linux定时对日志批量打包Shell脚本及定时任务crontab 详细用法
    httpd2.4出现AH00025: configuration error
    apache启动失败
    软件工程中的反面模式(anti-pattern)
  • 原文地址:https://www.cnblogs.com/william7neral/p/4186165.html
Copyright © 2020-2023  润新知