2010-05-20 17 views
0

我寫了一個rails模塊,它爲Google地圖生成一些Javascript。當用戶在網頁上進行更改時,我使用observe_field回叫服務器重新生成地圖的Javascript(不更新整個頁面)。我無法找到將新JavaScript插入頁面的好方法。我試過通過ajax在Rails中加載非RJS 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/

回答

0

這裏有一兩件事,我想那種-的工作。

我向頁面添加了一個observe_field,然後使用原型的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

我最終做的是擺脫動態JavaScript,而是設置地圖由json數據結構驅動。所以當地圖的標記發生變化時,我通過rails replace_html方法下載一些json並將它們加載到地圖中。