首页 > 如何优雅的解决velocity与jquery的冲突

如何优雅的解决velocity与jquery的冲突

有没有比以下4个方法,更优雅的解决方案?

1、使用jQuery代替$. 如:jQuery.ajax();

缺点:不适合扩展,一旦替换成第三方库时,那就麻烦大发

2、使用jQuery.noConflict。 如:var j = jQuery.noConflict(); j.ajax();

缺点:当使用jQuery的相关插件时,会使得插件失效哦!

3、wrap jQuery中的冲突方法。

如$.ajax()在Velocity中会冲突,则重新定义如下:

function dw(){}

dw.ajax=function(s){ jQuery.ajax(s); } dw.ajax();

方案3基本上解决了1、2中的缺点~~~故推荐使用第三种方法!

4、

定义一个 $JQ="$."

以后可以用 ${JQ}ajax().......



还有一种模块化的思想,使用 requirejs 或者 seajs 等模块加载器,将jQuery 和 你所说的 velocity作为一个模块加载即可。

例如 seajs官方快速上手的这个例子:http://seajs.org/docs/#quick-start


;(function($){
    $(function(){
        //...
    })
})(jQuery)

十秒钟以内没搜明白什么是velocity,好像这个叫Velocity.js的货怎么看也和jQuery.ajax没关系,先不管了

如果冲突的是$这个名字,那么我认为正道应该就是1了,也就是jQuery.noConfilict(),然后用jQuery,至于第三方库,如果第三方库连这个都不支持,还在依赖window.$的话,我建议你强烈怀疑那个第三方库的作者的水准,尽量踢掉,实在不行就帮他包一层(function($){})(jQuery)也就是一句话的事儿

重头看一遍好像又有点像那个模板引擎的问题了。那么答案应该是在HTML里嵌入JS代码是邪路,醒醒吧少年


(function($){})(jQuery);可以解决大部分问题了。

【热门文章】
【热门文章】