| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | <!DOCTYPE html><html><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <title>The source code</title>  <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />  <script type="text/javascript" src="../resources/prettify/prettify.js"></script>  <style type="text/css">    .highlight { display: block; background-color: #ddd; }  </style>  <script type="text/javascript">    function highlight() {      document.getElementById(location.hash.replace(/#/, "")).className = "highlight";    }  </script></head><body onload="prettyPrint(); highlight();">  <pre class="prettyprint lang-js"><span id='Ext-app-EventBus'>/**</span> * @class Ext.app.EventBus * @private */Ext.define('Ext.app.EventBus', {    requires: [        'Ext.util.Event',        'Ext.Component'    ],    mixins: {        observable: 'Ext.util.Observable'    },    constructor: function() {        this.mixins.observable.constructor.call(this);        this.bus = {};        var me = this;        Ext.override(Ext.Component, {            fireEvent: function(ev) {                if (Ext.util.Observable.prototype.fireEvent.apply(this, arguments) !== false) {                    return me.dispatch.call(me, ev, this, arguments);                }                return false;            }        });    },    dispatch: function(ev, target, args) {        var bus = this.bus,            selectors = bus[ev],            selector, controllers, id, events, event, i, ln;        if (selectors) {            // Loop over all the selectors that are bound to this event            for (selector in selectors) {                // Check if the target matches the selector                if (selectors.hasOwnProperty(selector) && target.is(selector)) {                    // Loop over all the controllers that are bound to this selector                    controllers = selectors[selector];                    for (id in controllers) {                        if (controllers.hasOwnProperty(id)) {                            // Loop over all the events that are bound to this selector on this controller                            events = controllers[id];                            for (i = 0, ln = events.length; i < ln; i++) {                                event = events[i];                                // Fire the event!                                if (event.fire.apply(event, Array.prototype.slice.call(args, 1)) === false) {                                    return false;                                }                            }                        }                    }                }            }        }        return true;    },    control: function(selectors, listeners, controller) {        var bus = this.bus,            hasListeners, tree, list,            selector, options, listener, scope, event, listenerList, ev;        if (Ext.isString(selectors)) {            selector = selectors;            selectors = {};            selectors[selector] = listeners;            this.control(selectors, null, controller);            return;        }        hasListeners = Ext.util.Observable.HasListeners.prototype;        for (selector in selectors) {            if (selectors.hasOwnProperty(selector)) {                listenerList = selectors[selector] || {};                for (ev in listenerList) {                    if (listenerList.hasOwnProperty(ev)) {                        options  = {};                        listener = listenerList[ev];                        scope    = controller;                        event    = new Ext.util.Event(controller, ev);                        // Normalize the listener                        if (Ext.isObject(listener)) {                            options  = listener;                            listener = options.fn;                            scope    = options.scope || controller;                            delete options.fn;                            delete options.scope;                        }                        event.addListener(listener, scope, options);                        hasListeners[ev] = 1;                        // Create the bus tree if it is not there yet                        tree = bus[ev] || (bus[ev] = {});                        tree = tree[selector] || (tree[selector] = {});                        list = tree[controller.id] || (tree[controller.id] = []);                        // Push our listener in our bus                        list.push(event);                    }                } //end inner loop            }        } //end outer loop    }});</pre></body></html>
 |