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 的新手,我已经为此绞尽脑汁了很长一段时间……我无法将我的控制器中创建的 RAILS JSON 字符串转换为 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 得到解决。我面临的另一个问题是确保给 replaceMarkers 方法提供了一个标记数组,而不是 JSON 字符串

请注意,当您(在服务器端)创建新地图时,您必须为标记提供 JSON 字符串。

当您在客户端(在 JS 中)调用 replaceMarkers 时,您必须提供一个标记对象数组。

于 2011-10-07T22:47:30.700 回答