2010-03-27 5 views
3

Хорошо, так вот ситуация. Вытягивал мои волосы на этом.Как получить jQuery для работы с прототипом

Я - это noob. Лишь в течение 6 недель использовались рельсы. Я использую стандартный пакет установки, и мой код сильно использует прототипы помощников. Как я уже сказал, noob;)

Так что я пытаюсь добавить некоторые эффекты jQuery, такие как PrettyPhoto. Но происходит то, что при первой загрузке страницы PrettyPhoto отлично работает. Однако, как только кто-то использует помощник Prototype, как ссылка, созданная с помощью link_to_remote, Prettyphoto перестает работать.

Я пытался jRails, все исправления, предлагаемых на сайте JQuery, чтобы остановить конфликты ...

http://docs.jquery.com/Using_jQuery_with_Other_Libraries

... даже сделать некоторые сумасшедшие вещи любит переименовывать все $ в прототипе .js до $$$ безрезультатно. Либо помощники прототипа ломаются, либо jQuery ломается.

Кажется, я ничего не могу сделать, чтобы они работали вместе.

Любые идеи?

Вот часть моей application.html.erb

<%= javascript_include_tag 'application' %> 
<%= javascript_include_tag 'tooltip' %> 
<%= javascript_include_tag 'jquery' %> 
<%= javascript_include_tag 'jquery-ui' %> 
<%= javascript_include_tag "jquery.prettyPhoto" %> 
<%= javascript_include_tag 'prototype' %> 
<%= javascript_include_tag 'scriptalicious' %> 
</head> 
<body> 
<script type="text/javascript" charset="utf-8"> 
    jQuery(document).ready(
    function() { 
     jQuery("a[rel^='prettyPhoto']").prettyPhoto(); 
    }); 
</script> 

Если я ставлю прототип, прежде чем JQuery, прототип помощники не работают Если я ставлю условие noconflict в, ни работ.

Заранее благодарен!

Крис

КСТАТИ: когда я пытаюсь это, с сайта JQuery:

<script> 
jQuery.noConflict(); 

// Use jQuery via jQuery(...) 
jQuery(document).ready(function(){ 
    jQuery("div").hide(); 
}); 

// Use Prototype with $(...), etc. 
$('someid').hide(); 
</script> 

моя страница исчезает!

ответ

6

вы должны использовать jQuery.noConflict(); и после этого все вызовы JQuery должно быть сделано только с помощью jQuery() вместо of $()

+0

Я тоже пробовал, но это тоже не сработало. – thinkfuture

0

Есть целый ряд вещей, которые вы можете сделать.

Один из них - это проверить порядок, в котором вы загружаете теги javascript. Обычно приложение должно заканчиваться.

Если вы используете jrails, вам не нужно загружать прототипы и скриптабельные библиотеки вообще.

Я смиренно предлагаю вам попробовать следующее:

<%= javascript_include_tag 'jquery', 'jquery-ui', 'tooltip', 'jquery.prettyPhoto', 'application' %> 

Так как вы в начале цикла разработки, вы можете использовать только библиотеки Jquery и устранить прототип вообще. На стороне jQuery гораздо больше выбора.

Я не говорю, что это то, что все должны делать, но в вашем конкретном случае это кажется разумным.

+0

Спасибо! В какой-то момент я планирую полностью перейти на jQuery, но на данный момент мое приложение должно работать. Allesklar, я редактировал свои теги include, как вы отметили, но затем мои ссылки прототипов перестали работать. – thinkfuture

+0

Попробуйте добавить прототип и scriptaculous перед «подсказкой». – allesklar

+0

Я сделал это, и это не имеет значения. – thinkfuture

0

Похоже, что вы почти у цели.Я думаю, что вы хотите что-то вроде этого:

<%= javascript_include_tag 'prototype' %> 
<%= javascript_include_tag 'scriptalicious' %> 
<%= javascript_include_tag 'jquery' %> 
<%= javascript_include_tag 'jquery-ui' %> 
<%= javascript_include_tag "jquery.prettyPhoto" %> 
<%= javascript_include_tag 'application' %> 
<%= javascript_include_tag 'tooltip' %> 

<script type="text/javascript"> 
    jQuery.noConflict(); 

    // Use jQuery via jQuery(...) 
    jQuery(document).ready(
    function() { 
     jQuery("a[rel^='prettyPhoto']").prettyPhoto(); 
    }); 

    // Use Prototype with $(...), etc. 
    $('someid').hide(); 
</script> 

я не уверен, что пример, который вы нашли на сайте JQuery, но JQuery («ДИВ») скрыть();. похоже, что он скрывает все div на вашей странице, поэтому ваша страница исчезает. Конфликт - это то, что вам нужно.

Переупорядочение javascript включает в себя, как указано выше, означает, что вы можете включить свой встроенный JS в application.js вместо этого, который некоторые считают более аккуратным.

+0

Спасибо Тим! Я пробовал это, но мои ссылки на прототипы были закрыты. :( – thinkfuture

+0

Вы делаете что-либо с функцией $ в application/tooltip.js? Если вы перемещаете приложение/tooltip.js после того, как в блоке noConflict это имеет значение? –

0

изменить символ $ для JQuery в этих следующих файлах

<%= javascript_include_tag 'jquery-ui' %> 
<%= javascript_include_tag "jquery.prettyPhoto" %> 

включает Jquery файл первый, а затем включить прототип.

Надеюсь, что это решит проблему

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