zoukankan      html  css  js  c++  java
  • DOM无关事件

    C#中,事件和委托是模块解耦的手段。在javascript中呢?

    一个采用发布/订阅模式实现事件驱动的库。

    发布/订阅模式是一种消息模式,

    参与着:发布者、订阅者。

    var PubSub={

        subscribe:function(ev,callback){

            

            //创建 _callback 对象,除非她已经存在

            var call=this._callback||(this._callback={});

            

            //针对给定的事件Key创建一个数组,除非这个数组已经存在

            //然后将回调函数追加到这个数组中

            (this._callback[ev]||(this._callback[ev]=[])).push(callback);

            returnthis;

        },

        

        publish:function(){

            

            //arguments对象转换为真正的数组

            var args=Array.prototype.slice.call(arguments,0);

            

            //拿出第1个参数,即事件的名称

            var ev=args.shift();

            

            //如果不存在 _callback对象,则返回

            //或者如果不包含给定事件对应的数组

            var list,calls,i,l;

            if(!(calls=this._callback)) returnthis;

            if(!(list=this._callback[ev])) returnthis;

            

            //触发回调

            for(i=o,l=list.length;i<l;i++)

                list[i].apply(this,args);

                

            returnthis;

            

        }

    };

    //使用方法,事件名称可以采用命名空间的方式来管理,例如使用冒号(:)分隔符

    PubSub.subscribe("user:create",function(){/* ... */});

    PubSub.publish("user:create");

    //这时候PubSub是全局变量,可以应用于全局事件。我们也可以很容易的将其应用于局部事件。

    //如下

    var Asset={};

    //添加PubSub

    jQuery.extend(Asset,PubSub);

    //现在就可以用publish/subcribe函数了

    Asset.subscribe("create",function(){/* ... */});

     
     
    作者:易简.道    
     
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    ActiveReports中如何在后台导出运行时绑定数据源报表
    ActiveReports中如何控制页面的记录数
    WordPress建站固定链接问题
    Linux环境下使用g++编译C++
    Git diff结果显示分析
    VTK使用过程中遇到的问题
    右值引用、移动语义和完美转发(下)
    右值引用、移动语义和完美转发(中)
    右值引用、移动语义和完美转发(上)
    new和malloc的联系与区别(下)
  • 原文地址:https://www.cnblogs.com/xyicheng/p/2955335.html
Copyright © 2011-2022 走看看