Javascriptは購読コンポーネントを発表します.

11705 ワード

共通のリリース購読コンポーネントは、モジュール間の結合、順序付け、参照、オリジナルをサポートするために、購読関連ロジックを発行する必要はありません.
 
EventConttainer:公開-公共コンポーネントの購読
Array.prototype.sort = function (fn) {//    
    var temp;
    fn = fn || function (a, b) { return a > b; };
    for (var i = 0, len = this.length; i < len; i++) {
        for (var j = i + 1; j < len; j++) {
            if (fn(this[i], this[j])) {
                temp = this[i];
                this[i] = this[j];
                this[j] = temp;
            }
        }
    }
    return this;
};

function EventContainer(){
    var _events={};
    var _getType=Object.prototype.toString;    
    /*       ,1、    ;2、     */
    this.subscribe=function(event,arg){/*arg is Function or Object*/        
        var func,sort=0;
        if(_getType.apply(arg)==="[object Object]"){
            func = arg.func;
            sort = arg.sort;
        }
        else if(_getType.apply(arg)==="[object Function]"){
            func = arg;
        }
        else{
            return;            
        }
        if(_getType.apply(_events[event])!=="[object Array]"){
            _events[event]=[];
        }
        _events[event].push({func:func,sort:sort});
    };
    this.trigger=function(event,data){
        var handlers = _events[event];
        if(_getType.apply(handlers)==="[object Array]"){
            handlers = handlers.sort(function(a,b){return a.sort>b.sort});
            for (var i = 0,len=handlers.length; i ) {
                handlers[i]["func"](data);
            }
        }
    };
}
 
 
ShopcartBusiness:ショッピングカーページのロジックは、このモジュールでイベントを購読します.
//       -shopcart.js
function ShopCartBusiness(){
    if (window.eventContainer===undefined) {
        window.eventContainer=new EventContainer();
    }
  /*       ,1、    ;2、     */
    window.eventContainer.subscribe("login",function(data){
        console.info("login success!");
        console.info(data);
    });
    window.eventContainer.subscribe("login",{"sort":3,"func":function(data){
        console.info("login success3!");
        console.info(data);
        }
    });
    window.eventContainer.subscribe("login",{"sort":5,"func":function(data){
        console.info("login success5!");
        console.info(data);
        }
    });
    window.eventContainer.subscribe("login",{"sort":2,"func":function(data){
        console.info("login success2!");
        console.info(data);
        }
    });
    window.eventContainer.subscribe("login",{"sort":1,"func":function(data){
        console.info("login success1!");
        console.info(data);
        }
    });
    window.eventContainer.subscribe("regist",function(data){
        console.info("regist success!");
        console.info(data);
    });

    //      
    var loginBox = new LoginBox();
}
 
LoginnBox:ポップアップロジック、このモジュールでメッセージを発表します.
function LoginBox(){
    if (window.eventContainer===undefined) {
        window.eventContainer=new EventContainer();
    }
    var _initEvents=function(){
        $("#btnLogin").on("click",function(){
            window.eventContainer.trigger("login","  11");
        });
        $("#btnRegist").on("click",function(){
            window.eventContainer.trigger("regist","  22");
        });
    };
    _initEvents();
}