论坛首页 Web前端技术论坛

Mootools和Jquery之间的选择问题

浏览 46238 次
精华帖 (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久,第一次回一个:)
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics