Javascriptは購読コンポーネントを発表します.
11705 ワード
共通のリリース購読コンポーネントは、モジュール間の結合、順序付け、参照、オリジナルをサポートするために、購読関連ロジックを発行する必要はありません.
EventConttainer:公開-公共コンポーネントの購読
ShopcartBusiness:ショッピングカーページのロジックは、このモジュールでイベントを購読します.
LoginnBox:ポップアップロジック、このモジュールでメッセージを発表します.
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();
}