0

JavaScript と変数の受け渡し方法を理解しようとしていますが、うまくいきません。Google マップのマーカーを ajax で更新しようとしていますが、何も起こりません。

いくつかの変数をコントローラーに送信するフォームを送信します。いくつかのものは処理され、.js で応答します...

find.js.erb

$('#collapseTwo ul').html("<%= j render partial: 'events/sidebar', collection: @events %>");

alert(<%= raw @hash.to_json %>);

clearMarkers();


markers = handler.addMarkers(<%= raw @hash.to_json %>, {
  draggable: false
});

レンダリングは正常に実行されるため、すべてがそこで機能していますが、マップを更新するためのマーカーを取得できないようです。そのアラートは を示し[object Object]ているので、おそらく正しいのですが、マーカーに対するアクションはありません。

marker.coffeeの形でいくつかの変更を加えました

clear: ->
  @getServiceObject().setMap(null)

show: ->
  @getServiceObject().setVisible(true)

hide: ->
  @getServiceObject().setVisible(false)

それでclearMarkers();うまくいきます。それは別のファイルにあり、他のアクションを保存しています

events.js.コーヒー

jQuery ->
  ...
  ...

@clearMarkers = ->
  for marker in Gmaps.store.markers
    marker.clear()
  Gmaps.store.markers = []

だから...私は最初にマップを呼び出します...

jQuery ->
  handler = Gmaps.build 'Google'
  handler.buildMap { 
    provider: { 
      minZoom: 3
    }, internal: {id: 'map'} }, ->

      markers = handler.addMarkers( $('#map').data('events'), 
        draggable: false
        flat: false
      )

      #moves map to marker clicked + open infowindow
      $(document).on 'click', '#sideBar li', ->
        markers[$(this).data('marker')].panTo()
        markers[$(this).data('marker')].click()

そこの一番下にあるその関数...私がmarkers配列にアクセスできる唯一の方法は、それがhandler.buildMap関数内にあったためです。markersでは、変数はグローバルである必要がありますか? 他にどのように行動できますか?

また、handler変数...どこでも利用できるように思えます。を手動で に入れようとし@hashまし.addMarkers()たが、ハンドラーはマーカーを作成しませんでした。

4

1 に答える 1

2

グローバルにアクセスできるストアが必要です。

次のことをお勧めします。

Gmaps.store = {}
jQuery ->
  Gmaps.store.handler = Gmaps.build 'Google'
  Gmaps.store.handler.buildMap...
    Gmaps.store.markers = Gmaps.store.handler.addMarkers(...)

js.erb 内の変数にもアクセスできます。

于 2013-11-04T20:08:03.123 に答える