2010-02-27 2 views
0

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

<%= 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 на этой странице, поэтому я не могу подтвердить, работает ли это даже. Я видел этот ответ (How do I run different versions of jQuery on the same page?), но он не работает полностью. Мой локальный JavaScript работает, но плагины jQuery, похоже, не радуют.

Любые предложения?

ответ

1

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

+0

Я использовал обфусцированный Javascript, поэтому мне нужно на самом деле платить за меню, но была линия : var $ = jQuery, который я изменил на var $ = jq132, и теперь все играет хорошо. Благодаря! –

1

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

(function($) { 

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

})(jq321); 
+0

Это не совсем сработало. У них также есть вызов функции jQuery, который выполняет некоторую работу, которая становится неопределенной, когда вы это делаете. –

Смежные вопросы