【问题标题】:Change the JQuery version used in richfaces更改 Richfaces 中使用的 JQuery 版本
【发布时间】:2011-12-01 15:17:44
【问题描述】:

我用的是richfaces 3_3_3.Final,不想用最新的jQueryhttp://code.jquery.com/jquery-latest.pack.js,但是好像有冲突。

Richfaces 已经加载了一个 jQuery 版本(witch 不是合适的版本,好像是 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() 是一个很好的研究领域吗?

【问题讨论】:

  • @Moin Zaman This post 告诉我们可以并排使用多个版本的 jQuery,但没有说明如何。

标签: jquery richfaces


【解决方案1】:

是的,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 会更新。如果您正在加载最新包,这些更新可能会在您不知情的情况下破坏您网站的功能。选择一个版本并坚持使用它更安全,只有在您确认您的网站将继续正常运行时才升级。

【讨论】:

  • 我理解答案,但我无法实施解决方案。与 Richfaces 有冲突(扩展数据表无法显示)
  • 这听起来与您最初提到的问题不同 - 或者至少我没有看到连接。你如何包含 RichFaces 和 jQuery?
  • 我的项目正在使用 JSF1.2/Richfaces(使用 maven)。当我测试包含另一个版本的 jQuery 时,我在标题中添加 &lt;script type="text/javascript"...
  • 我接受这个解决方案,因为你解释了如何并排使用 2 个版本的 jQuery,但问题仍然存在:在 $ 版本 1.6.4 中使用,并让 Richfaces 使用 1.3.2 ...
  • @Jean-Charles - 我遇到了与&lt;rich:extendedDataTable&gt; 相同的问题...使用jQuery.noConflict() 为我解决了这个问题。
猜你喜欢
  • 2011-04-22
  • 2012-11-07
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
相关资源
最近更新 更多