사용자 정의 이벤트 모듈 엔진

9168 단어 사용자 정의
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에서 온 사용자 정의 이벤트 모듈입니다. 왜 그들이 혼자 놓아도 소용이 없는지 모르겠습니다. 한번 보면 매우 실용적이기 때문에 직접 가져와서 사용하면 됩니다.

좋은 웹페이지 즐겨찾기