更改richfaces中使用的JQuery版本

时间:2011-10-05 16:10:35

标签: 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">

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

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

1 个答案:

答案 0 :(得分:6)

是的,jQuery.noConflict是一个好的开始,但是由于您使用的“其他库”也是jQuery,因此可能会出现并发症。

加载jQuery时,它将$jQuery定义为全局变量。使用.noConflict将“放弃对$变量”的控制 - 意味着之前的$,它将再次设置。如果首先加载v1.3.2并且接下来加载最新包(现在为1.6.4),.noConflict将使$引用v1.3.2,但jQuery仍会引用1.6.4。

基本上,在加载最新包之前,需要对jQuery进行别名。 See my fiddle used to simulate your situation(也粘贴在下方)。

<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>

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


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