让Javascript函数支持事件绑定/触发
March/28th 2012

    JQuery支持事件绑定,触发等操作。不仅仅对DOM元素有效,对普通的函数或者对象一样可以。比如

var a = {};
$(a).bind('msg',function(){ alert(1); });
$(a).trigger('msg');

    我刚做了个函数,可以为自己写的普通函数增加类似上面这种事件监听、绑定功能。并且支持跟JQuery一样的事件命名空间。例如:

function ClasssA() {} //某个函数
EventMachine.call(ClassA); //为此函数的prototype增加几个方法(bind,unbind,trigger,unbindAll),此函数源代码见后面的链接

var a = new ClassA(); //实例化ClassA
a.bind('msg',callback1);  //click的时候执行callback1
a.bind('msg.a',callback2); //click的时候执行callback2
a.bind('msg.b',callback3); //click的时候执行callback3
a.bind('logout.a',callback4); //mouseover的时候执行callback4

a.unbind('msg'); //干掉 callback1,2,3
a.unbind('msg.a'); //干掉 callback2
a.unbind('.a'); //干掉callback2,4
a.unbind('msg',callback2); //干掉callback2
a.unbind('.b'); //干掉callback3
a.unbindAll(); //干掉所有

a.trigger('msg','abc'); //触发callback1,2,3 并传递'abc'参数

    源代码及demo看这里

    因为目前采用的方案是往this的prototype上写方法,所以暂时只支持函数。 不过可以经过很简单的修改来支持普通的对象(貌似没什么必要。。。)

    因为没有用到任何平台相关的东西,所以EventMachine函数可以运行在几乎所有支持Javascript的地方。比如NodeJS, Web, Titanium等



9351 read 2 comment(s)
#1
Smallsmallwolf   2012年08月20号 09:43       回复
unbindAll 可以解绑定匿名函数不能啊?
#2
longbill   2012年08月20号 09:52       回复
@Smallsmallwolf 当然可以。我又不管你是不是匿名函数。
添加新的评论
称呼:*
邮件:*
网站:
内容:

Copyright © Longbill 2008-2017 , Designed by EndTo , Powered by EndCMS