gmaps4rails replaceMarkers无法正常工作(javascript)

堆栈详细信息 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时,标记是对象数组的forms,但是replaceMarkers调用(如上所述)包含一个JSON字符串

其他尝试尝试传递标记而不转换为JSON

 Gmaps.map.replaceMarkers(markers_array); 

但那并没有奏效。

我在脑海中突破了很长一段时间,对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) 

希望这有助于其他人!

通过升级到gmaps4rails 1.3.0解决了此问题。 我遇到的另一个问题是确保为replaceMarkers方法提供了一个标记数组,而不是JSON字符串

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

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