精华帖 (5) :: 良好帖 (6) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-14
keshin 写道 yeaha 写道 mootools可以很方便的自定义event jQuery对浏览器的event进行了非常好的封装,但是貌似不支持自定义event,这样我的widget之间就无法通过自定义事件来相互驱动 我不是jQuery痛恨者,用过prototype、dojo、extjs、mootools,并且或多或少的读了它们的代码之后,发觉mootools更符合我的开发要求 就例子论例子,jQuery还是可以自定义event的,而且也不麻烦: $("something").bind("yourEventName", function(event, msg) { alert(msg); }) $("something").trigger("yourEventName", ["msg"]); 当初我也经历过Mootools和jQuery之间选择的问题,Mootools的源码让我在阅读时有种非常舒畅的感觉,但不是每个人都需要去阅读它,而且个人认为从使用者角度来说,jQuery的简洁和淡化类的理念更容易保证代码质量。 这的确是一个发送自定义事件的方法,但bind到$("something")还要自定义个事件名字怎么都觉得不爽。 其实这个一个很常见的需求,在Dojo里有dojo.connect很好的解决了这个问题,也可以很容易的模仿一个。 我期望的效果应该是一个jQuery的global方法: $.bind(object, source_method, target_method, context) 一个试验性的简单实现如下: (function($){ $.bind=function(obj, source, target){ old = obj[source]; obj[source] = function(){ old(); target(); }; }(jQuery)); 然后就可以这个用了: function hello(){console.info('Hello');} function hi() {console.info('Hi');} $.bind(window, 'hello', hi); hello(); 在Firebug里的输出应该是: Hello Hi 这只是一个简单的实现,它其实和使用什么javascript的库的关系不大,只是javascript的强大而已,在扩充一下:(1)在obj[source]上添加一个Array属性保存多个targets (2)加上t运行的context,也就是this,利用apply和call 不知道jQuery的plugin里有没有已经做好的,今天jQuery的plugin页面打不开,就自己玩玩了 这个论坛不错,潜水n久,第一次回一个:) |
|
返回顶楼 | |