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等
10925 read 2 comment(s)
邮件:*
网站:
内容: