更改richfaces中使用的JQuery版本

Jea*_*les 5 jquery richfaces

我正在使用richfaces 3_3_3.Final,我不想使用最新的jQuery http://code.jquery.com/jquery-latest.pack.js,但它似乎有冲突.

Richfaces已经加载了一个jQuery版本(女巫不是合适的版本,似乎是1.3.2):

<script type="text/javascript" src="/project/a4j/g/3_3_3.Finalorg/richfaces/renderkit/html/scripts/jquery/jquery.js.jsf">
Run Code Online (Sandbox Code Playgroud)

我可以在我的Javascript流程中使用最新版本,并允许RichFaces使用自己的版本,以及如何使用?

jQuery.noConflict()是一个很好的研究领域吗?

Jef*_*eff 6

是的,这jQuery.noConflict是一个良好的开端,但由于您使用的"其他库"也是jQuery,可能会出现并发症.

当你加载jQuery时,它定义$和jQuery作为全局变量.使用.noConflict将"放弃对$变量的控制" - 意味着$之前的任何内容,它将再次设置.如果首先加载v1.3.2并且接下来加载最新包(现在为1.6.4),.noConflict则将$参考v1.3.2但jQuery仍将参考1.6.4.

基本上,在加载最新包之前,需要对jQuery进行别名.看看我用来模拟你情况的小提琴(也粘贴在下面).

<script type="text/javascript">
    //alias v.1.3.2
    var $132 = $;
</script>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>
<script type="text/javascript">
    //alias v1.6.4
    var $164 = $, jQuery164 = $;

    //reset original variables to v1.3.2
    $ = jQuery = $132;

    console.log("v1.3.2: ", $().jquery, jQuery().jquery)
    console.log("v1.6.4: ", $164().jquery, jQuery164().jquery)

    $('div')      //selected using v1.3.2
    $164('div')   //selected using v1.6.4
</script>
Run Code Online (Sandbox Code Playgroud)

加载1.6.4后,您需要对其进行别名并设置$并jQuery返回1.3.2对象.这不使用,.noConflict因为它基本上做同样的事情.RichFaces将继续使用1.3.2工作,您将根据别名1.6.4版本编写代码.在我的小提琴中,这意味着使用$164而不是使用$.我希望这是有道理的.我相信小提琴会更清晰.


最后,使用开发代码是很好的,jquery-latest.pack.js但您不应该在生产网站上使用它.原因是因为在未来的某个时刻,jQuery将会更新.如果您要加载最新的包,那些更新可能会破坏您网站的功能,而您甚至不知道它.只选择一个版本并坚持使用它更安全,只有在您确认您的网站将继续正常运行时才进行升级.