Загрузка не RJS JavaScript через ajax в Rails - PullRequest
0 голосов
/ 20 мая 2010

Я написал модуль rails, который генерирует некоторый Javascript для карты Google. Поскольку пользователь вносит изменения на веб-странице, я использую observe_field, чтобы перезвонить на сервер, чтобы восстановить Javascript карты (без обновления всей страницы). У меня проблемы с поиском хорошего способа вставить новый Javascript на страницу. Я пробовал

<div id='my_div_1'>div1</div>
<%= 
  update_page_tag do |page|
    page.replace_html 'my_div_1', "<script>alert('hi');</script>"
  end
%>

но похоже, что replace_html работает только для не скриптового HTML. Он задыхается, когда содержимое содержит закрывающий тег </script>.

Вот страница, которая, я думаю, является корнем проблемы: http://www.wwco.com/~wls/blog/2007/04/25/using-script-in-a-javascript-literal/

Ответы [ 2 ]

0 голосов
/ 23 мая 2010

В итоге я избавился от динамического javascript и вместо этого настроил карту на управление структурой данных json. Поэтому, когда маркеры для карты меняются, я загружаю некоторые json через метод rails replace_html и загружаю их в карту.

0 голосов
/ 23 мая 2010

Вот одна вещь, которую я попробовал - это сработало.

Я добавил поле наблюдения на страницу и затем использовал прототип Ajax.Updater, чтобы получить javascript для карты. Это работает примерно в 95% случаев, но я не верю, что это отработает последние 5%. После загрузки и выполнения javascript он вызывает глобальную функцию init_map, которая была определена при загрузке.

<% observe_field(:id_of_field_to_watch, 
:function => "
new Ajax.Updater('map_id', '/filter/map',   
{ 
    evalscripts: true,
    onComplete: function() { init_map() }
}); 
")
%>
...