define([], function() {
    function AppEventController(detail) {

    }

    AppEventController.prototype.dispatch = function(evtDetail) {
        document.body.dispatchEvent(new CustomEvent('app-event', {
            bubbles: true,
            cancelable: true,
            detail: evtDetail || {}
        }));
    };

    return new AppEventController();
});
@@ -120,16 +120,25 @@
 unction(
+evtName, 
 evtDetai
@@ -138,24 +138,187 @@
 vtDetail) %7B%0A
+        if (!evtName) %7B%0A            throw new Error(%22AppEvent name is missing%22);%0A        %7D%0A%0A        evtDetail = evtDetail %7C%7C %7B%7D;%0A        evtDetail.name = evtName;%0A
         docu
@@ -486,16 +486,596 @@
     %7D;%0A%0A
+    AppEventController.prototype.on = function(evtName, callback) %7B%0A        let callbackFunction = function(evt) %7B%0A            if (!evt.detail.type) %7B%0A                throw new Error(%22AppEvent detail is missing%22, evt);%0A            %7D%0A            callback(evt.detail.type, evt);%0A        %7D;%0A%0A        document.body.addEventListener(%22app-event%22, callbackFunction);%0A        return callbackFunction;%0A    %7D;%0A  %0A  %09AppEventController.prototype.removeEventListener = function(callbackOnFunction) %7B%0A        document.body.removeEventListener(%22app-event%22, callbackOnFunction);        %0A    %7D;%0A%0A
     retu

add On/RemoveEventListener methods to AppEvent singleton