2011-10-06 36 views
1

栈细节 红宝石1.9.2p180, 导轨3.0.9, gmaps4rails 1.0.2, jquery.json-2.3.min.jsgmaps4rails不工作(JavaScript的)

背景replaceMarkers 我是gmaps4rails的新手,非常喜欢宝石。到目前为止,所有工作都很顺利,但我正在尝试第一次动态更新标记。我做了以下中的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调用

  3. 证实,在源,当addMarkers被称为初始页面加载,标记是物体的形式JSON字符串阵列,但replaceMarkers呼叫(如我上面提到的)含有JSON字符串试图通过标记

其它尝试 而不转换到JSON

Gmaps.map.replaceMarkers(markers_array); 

但这并没有奏效。

+1

是的,我在这里有一个错误。更新到最新版本的宝石,并告诉我是否可以。 – apneadiving

+0

好的,正在玩这个 - 通过升级到1.3.0来完成这项工作 - 当我传递一个JSON字符串来代替传递一个对象数组的JSON字符串时仍然遇到问题。 – Param

+0

只需要一个数组。 '[{json_string},{json_again}]'应该没问题。 – apneadiving

回答

1

此问题已通过升级到gmaps4rails 1.3.0解决。 我面临的另一个问题是要确保replaceMarkers方法有一个标记数组,而不是JSON字符串

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

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

+0

很高兴你找到了。 – apneadiving

2

我把这段时间打破了很长一段时间,对于JS和Rails来说都是新的......我无法将我的控制器中创建的RAILS jSON字符串转换为JSON对象的JavaScript数组。

我试图抓住由_to_gmaps4rails生成的字符串,但它充满了转义字符。我现在知道这是由于Rails的变化,以防止脚本被数据插入。

我尝试许多事情,比如解析JSON在浏览器端,单独地传递数据元素等

原来所有我需要的是从被转义防止串的原始()函数。这是我的工作代码:

在我的控制器

@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) 

希望这可以帮助其他人!