2011-01-28 3 views
0

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

<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> 

до сих пор все ж орки здорово.

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

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

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

ответ

1

имеют взглянуть на Rjs документы ... http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper/JavaScriptGenerator/GeneratorMethods.html

вы можете использовать его с JQuery использованием jrails ...

затем вместо

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

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

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

0

Я бы переместить замирания части в 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 называется, но сценарий в тексте оценивается ранее.)
Смежные вопросы