Яваскрипт на частичке - рубин на рельсах - PullRequest
0 голосов
/ 28 января 2011

У меня есть часть, которая загружается каждые 3 секунды с использованием AJAX (структура прототипа), таким образом:

  <script type="text/javascript">
   new Ajax.PeriodicalUpdater('content', '/shouts/update.js', { method: 'get', frequency: 1});
</script>

это часть контроллера, которая загружает часть:

respond_to do |format|
    format.js {render(:partial => 'content', :locals => {:content => @last_shout.content})}
end

это содержимое частичного "_content.html.erb":

<h2><%= content %></h2>

Пока все отлично работает.

Я хочу добавить, что каждый раз, когда частичное будетбудет перезагружен, он будет исчезать при использовании Scriptaculous фреймворка.Я добавил этот код в частичное _content.html.erb:

 <script type="text/javascript">
$('content').fade({ duration: 3.0, from: 0, to: 1 });
</script>

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

Ответы [ 2 ]

1 голос
/ 28 января 2011

посмотрите документы RJS ... http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper/JavaScriptGenerator/GeneratorMethods.html

вы можете использовать его с jquery, используя jrails ...

тогда вместо

{render(:partial => 'content', :locals => {:content => @last_shout.content})}

Вы можете выполнить то же действие в связанных файлах rjs и добавить некоторые другие функции.

Он прост в использовании, посмотрите на пример в Интернете.

0 голосов
/ 07 февраля 2011

Я бы переместил исчезающую часть в AjaxUpdater:

<script type="text/javascript">
   new Ajax.PeriodicalUpdater('content', '/shouts/update.js', { method: 'get', frequency: 1, onComplete: function() {$('content').fade({ duration: 3.0, from: 0, to: 1 });}});
</script>

Это может быть вопросом времени (текст заменяется до вызова onComplete, но сценарий в тексте оценивается раньше.)

...