使用 javascript 在地圖上設定標記

假設有一個 .google_map div,它將成為地圖,並且其地址欄位顯示為 data 屬性的標記。

例如:

<!-- http://localhost:3000/profiles/123 -->
<div class="google_map" data-address-fields="[
  {label: 'Work address', value: 'Willy-Brandt-Straße 1\n10557 Berlin', 
  position: {lng: ..., lat: ...}},
  ...
]"></div>

要使用 turbolinks 來使用 $(document).ready 事件而不用手動管理 turbolinks 事件,請使用 jquery.turbolinks gem

如果你希望稍後使用地圖執行某些其他操作,例如過濾或資訊視窗,則可以方便地使用咖啡指令碼類管理地圖。

# app/assets/javascripts/google_maps.js.coffee
window.App = {} unless App?
class App.GoogleMap
  constructor: (map_div)->
    # TODO: initialize the map
    # TODO: set the markers

當使用幾個預設名稱空間的咖啡指令碼檔案時,可以方便地定義全域性 App 名稱空間,該名稱空間由所有咖啡指令碼檔案共享。

然後,遍歷(可能是幾個).google_map div 併為每個 div 建立一個 App.GoogleMap 類的例項。

# app/assets/javascripts/google_maps.js.coffee
# ...
$(document).ready ->
  App.google_maps = []
  $('.google_map').each ->
    map_div = $(this)
    map = new App.GoogleMap map_div
    App.google_maps.push map