2013-01-23 17 views
0

我有一個軌道應用程序的紅寶石有一個谷歌地圖上的標記,當你點擊它時,它會打開一個信息窗口使用JavaScript。我想把ruby var放在這個在窗口中顯示數據庫信息的javascript fn中。你怎麼把紅寶石裏面的JavaScript函數,谷歌地圖?

所以當用戶點擊標記時,他們從數據庫獲取動態信息,而不僅僅是來自js fn的通用文本。

如果有人這樣做之前,我會很感激,如果你能告訴我你是怎麼做的,謝謝

+0

您是否希望Ruby中的信息直接嵌入到頁面中,或者是AJAX的選項? (JavaScript向服務器發出web請求) –

+0

檢查gmaps4rails源代碼 – apneadiving

回答

2

您可以使用標籤,直接把你的JavaScript您html.erb文件並運行中嵌入Ruby代碼JavaScript的。請記住escape_javascript,因爲有時您的變量會通過一些特殊字符(如撇號)來混淆您的腳本。

<script> 
    alert(<%= escape_javascript @variable %>); 
</script> 
+0

謝謝這個作品 – timgeaney

1

處理JavaScript文件與該局將工作(儘管你必須記住要.erb添加到您的JS文件的末尾,以便ERB知道處理它...即maps.js的愛德華的解決方案.erb)。

事情是,這是違背資產管道的哲學,據我瞭解。 Rails故意將所有的Javascript連接到一個文件中,以節省HTTP請求的開銷。然而更重要的是,瀏覽器緩存這個文件,所以他們不需要在每個請求中重新提取它。如果你有一個根據請求改變JS文件的變量,Rails需要爲每個請求重新處理JS文件,這很昂貴。 (請注意,相同的概念適用於CSS)。

我發現的最佳解決方案是以某種方式將變量值放在頁面中,因爲這是需要在每個請求上動態處理的一個文件。通常我看到人們把它們放在隱蔽的形式,因爲這樣的:

<%= content_tag :input, nil, :type => 'hidden', :id => "map-name-field", :'data-name' => @map.name %> 

一種方法我也用是將其附加到頁面上的元素,它特有的頁面,如姓名或名稱:

<%= content_tag :h2, @map.name, :id => "map-name", :'data-name' => @map.name %> 

一旦它的頁面上,你可以從你的JS函數中獲取(但這裏的關鍵是,取出器功能是您地圖的所有isntances相同,因此並不需要更改或重新處理JS文件):

// Assuming jQuery 
// For the hidden input approach: 
var mapName = $('#map-name-field').value 
// or for the data-attribute approach: 
var mapName = $('#map-name').attr('data-name')