1

スタックの詳細 ruby​​ 1.9.2p180、rails 3.0.9、gmaps4rails 1.0.2、jquery.json-2.3.min.js

背景 私は gmaps4rails の初心者で、gem が本当に好きです。これまでのところすべてうまくいっていますが、初めてマーカーを動的に更新しようとしています。私はapplication.jsで次のことをしています:

var markers_json = $.toJSON(markers_array);
Gmaps.map.replaceMarkers(markers_json);

これは機能せず、次のエラーが発生します

Uncaught TypeError: Cannot read property 'position' of undefined
extendBoundsWithMarkers in gmaps4rails.googlemaps.js:204
Gmaps4Rails.adjustMapToBounds in gmaps4rails.base.js:443
Gmaps4Rails.create_markers in gmaps4rails.base.js:321
Gmaps4Rails.addMarkers in gmaps4rails.base.js:389
Gmaps4Rails.replaceMarkers in gmaps4rails.base.js:381

これまでの調査

  1. マップの初期作成が、マーカーを json 文字列として提供することによって行われることを確認しました。

  2. replaceMarkers 呼び出しで同じ形式の json 文字列を指定していることを確認しました

  3. ソースで、最初のページ読み込み時に addMarkers が呼び出されると、マーカーはオブジェクト配列の形式ですが、(前述のように) replaceMarkers 呼び出しには JSON 文字列が含まれていることを確認しました

その他の試み JSONに変換せずにマーカーを渡そうとしました

Gmaps.map.replaceMarkers(markers_array);

しかし、それもうまくいきませんでした。

4

2 に答える 2

2

私はJSとRailsの両方に慣れていないので、かなり長い間頭を悩ませていました...コントローラーで作成されたRAILSjSON文字列からJSONオブジェクトのJavaScript配列への変換に頭を悩ませることはできませんでした。

_to_gmaps4railsによって生成された文字列を取得しようとしましたが、エスケープ文字でいっぱいでした。これは、スクリプトがデータによって挿入されないようにするためのRailsの変更によるものであることがわかりました。

ブラウザ側でJSONを解析したり、データ要素を個別に渡したりするなど、さまざまなことを試しました。

必要なのは、文字列がエスケープされないようにするraw()関数だけでした。これが私の作業コードです:

私のコントローラーで:

@markers = plots.to_gmaps4rails do |plot, marker|
    escaped_comment = ERB::Util.html_escape plot.comment
    marker.infowindow render_to_string(:partial => 'my_partial', :locals => { :plot => plot})
    marker.picture ( {
        "picture" => ActionController::Base.helpers.asset_path(plot.marker) ,          # string,  mandatory
        "width" =>   64,          # integer, mandatory
        "height" => 32,          # integer, mandatory
    })
    marker.title   plot.title
    marker.json({ :id => plot.id, :comment => escaped_comment})
end

私のJSで(format.js Ajax呼び出しから返されます):

markers = <%=raw(@markers)%>
Gmaps.map.replaceMarkers(markers)

これが他の誰かに役立つことを願っています!

于 2012-08-31T16:10:03.080 に答える
1

この問題は、gmaps4rails 1.3.0 にアップグレードすることで解決されます。私が直面したもう 1 つの問題は、replaceMarkers メソッドに JSON 文字列ではなくマーカーの配列を指定することでした。

(サーバー側で) 新しいマップを作成するときは、マーカーの JSON 文字列を指定する必要があることに注意してください。

クライアント側 (JS) で replaceMarkers を呼び出す場合、マーカー オブジェクトの配列を指定する必要があります。

于 2011-10-07T22:47:30.700 に答える