发布订阅模式

在共同引用文件中加入这个

var PubSub = {
    subscribe: function(ev, callback) {
        //创建 _callbacks 对象,除非它已经存在了
        var calls = this._callbacks || (this._callbacks = {});
        //针对给定的事件 ev 创建一个数组,除非这个数组已经存在
        //然后将回调函数追加到这个数组中
        (this._callbacks[ev] || (this._callbacks[ev] = [])).push(callback);
        return this;
    },
    publish: function() {
        //将 arguments 对象转换为真正的数组
        var args = Array.prototype.slice.call(arguments, 0);
        //拿出第1个参数,即事件名称
        var ev = args.shift();

        //如果不存在 _callbacks 对象,则返回
        //或者如果不包含给定事件对应的数组
        var list, calls, i, l;
        if (!(calls = this._callbacks)) return this;
        if (!(list = this._callbacks[ev])) return this;

        //触发回调
        for (i = 0, l = list.length; i < l; i++) {
            list[i].apply(this, args);
        }
        return this;
    }
};

在tree main里绑事件

PubSub.subscribe("ye", function() {
        alert("hello!");
    });
    PubSub.subscribe("wem", function() {
        alert("wen!");
    });
    PubSub.publish("wem");   //wen
    PubSub.publish('ye');    //hello

 

在manager main里绑定时间

 //使用方法
    PubSub.subscribe("wem", function() {
        alert("wem!");
    });
    PubSub.publish("wem");       //wem
    PubSub.publish('ye');

 

因为require的原因,

不同的模块里订阅的事件不会蹿到另一个页面中,

即使重名,也是各自执行各自绑定的。

反正就是各自独立的意思啦

 

posted @ 2014-09-25 15:18  欧欧欧子  阅读(343)  评论(0)    收藏  举报