簡體   English   中英

您如何將ruby放在javascript函數Google Map中?

[英]How do you put ruby inside a javascript function, google maps?

我有一個Ruby on Rails應用程序,上面有一個帶有標記的谷歌地圖,當您單擊它時,它會使用JavaScript打開一個信息窗口。 我想將ruby var放到在窗口中顯示數據庫信息的javascript fn中。

因此,當用戶單擊標記時,他們將從數據庫中獲取動態信息,而不僅僅是從js fn獲得通用文本。

如果有人在此之前做過,如果您能告訴我您是如何做到的,我將不勝感激,謝謝

您可以使用標記將javascript直接放在html.erb文件上,並在javascript中運行嵌入式ruby代碼。 請記住要使用escape_javascript,因為有時您的變量會因諸如撇號之類的特殊字符而使腳本混亂。

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

愛德華(Edward)使用erb處理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函數中進行獲取(但關鍵是對於地圖的所有實例而言,fetcher函數都是相同的,因此無需更改或重新處理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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM