Использование элементов управления, требующих разных версий jQuery - PullRequest
0 голосов
/ 27 февраля 2010

Я пытаюсь использовать меню Apycom, требующее jQuery 1.3.2, на тех же страницах, что и Flexigrid для Rails, что зависит от jQuery 1.2.3. Чтобы добавить путаницу, я пытаюсь включить Rails 'prototype.js' и использовать это также. Вот мой заказ на включение:

<%= javascript_include_tag :defaults %>
<%= yield(:head) %>
<script src="/javascripts/jquery.js" type="text/javascript"></script>
<script src="/javascripts/flexigrid.js" type="text/javascript"></script>
<script type="text/javascript">
    jq123 = jQuery.noConflict(true)
</script>
<script src="/javascripts/menu/jquery.js" type="text/javascript"></script>
<script src="/javascripts/menu/menu.js" type="text/javascript"></script>
<script type="text/javascript">
    jq132 = jQuery.noConflict(true)
</script>

Когда страница, которую я тестирую, загружается, Firebug выдает мне следующее:

$ is undefined
  (240 out of range 237)                                      menu.js (line 240)

и, следовательно, мои меню не работают (по крайней мере, не те части, которые имеют значение). У меня нет сетки Flexigrid на этой странице, поэтому я не могу подтвердить, работает ли она вообще. Я видел этот ответ ( Как мне запустить разные версии jQuery на одной странице? ), но он не работает полностью. Мой локальный JavaScript работает, но плагины jQuery не кажутся счастливыми.

Есть предложения?

Ответы [ 2 ]

1 голос
/ 27 февраля 2010

@ MightyE отмечает, что файл menu.js неправильно ссылается на объект $. Простым решением этой проблемы было бы открыть файл menu.js и обернуть содержимое этого вызова функции

(function($) {

    // $ is now equal to jq321
    // menu.js stuff

})(jq321);
1 голос
/ 27 февраля 2010

Menu.js предполагает, что функция jQuery называется $. При использовании jQuery.noConflict вам необходимо обновить ссылки на функцию jQuery так, как вы их назвали (в данном случае jq123 или jq321).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...