2010-05-20 2 views
0

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

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

ответ

0

Вот одна вещь, которую я попробовал, что добрейшей из работал.

Я добавил к странице наблюдаемое_и_определение, а затем использовал 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() } 
}); 
") 
%> 
0

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

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