как перезагрузить файл js.jrs, используя ajax - PullRequest
1 голос
/ 24 января 2011

Я строю ruby ​​на рельсах. У меня есть частичный HTML, который содержит атрибут объекта - @ shout.content (текстовый атрибут).

В контроллере Shout есть - @shout = Shout.last

Идея состоит в том, что @shout меняется каждый раз, когда создается новый крик (он меняется на новый крик). Я хочу, чтобы каждые 3 секунды частичное (содержащее @ shout.content) "обновлялось" с помощью ajax.

Я подумал поставить функцию JavaScript, которая будет повторяться каждые 3 секунды:

setInterval( "updateShout()", 3000 ); 

И updateShout () запустит файл js.rjs, который сделает это:

page.replace_html('content', render(:partial => 'content', :locals => {:content => @shout.content}))

Отсутствующей частью является функция updateShout (). Я не знаю, как выполнить файл js.rjs с помощью JavaScript.

Знаете ли вы, как я могу выполнить js.rjs, используя javascript?

Спасибо

Одед

Ответы [ 2 ]

0 голосов
/ 24 января 2011

Учитывая, что вы (кажется) используете Prototype, вы можете значительно упростить это. Во-первых, вместо вашего звонка на setInterval, поместите это в тег <script> внизу вашей страницы:

new Ajax.PeriodicalUpdater('content', '/path/to/shouts.js', { method: 'get', frequency: 3});

Гарантируя, что вы замените /path/to/shouts.js на соответствующий URL. Подробнее см. periodicalUpdater.

Тогда, вместо вашего RJS-части, все, что вам нужно, это следующее в вашем контроллере:

respond_to do |format|
  format.html
  format.js { render :text => @shout.content }
end

При этом будет отображен текст последнего крика в системе и отправлено его обратно в браузер, при этом PeriodicalUpdater заменит вам текст в content div.

0 голосов
/ 24 января 2011

Вы просто вызываете партиалы, вам нужно запустить AJAX-запрос для получения записи и установить пользовательский интерфейс в соответствии с требованием. Если вы используете jquery, тогда запустите AJAX-запрос, создайте файл js.erb и вызовите ваш партиал, который сгенерирует требуемыйHTML, При успешном запросе просто обновите элементы DOM.

$.ajax({
       type: "GET",
       url: "<%= url %>"
     success: function(html){
          $("#content").html(html);
      }
   });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...