TypeError: this.clusterer is undefined after Rails Model name change

TypeError: this.clusterer is undefined after Rails Model name change

我更改了我的模型和控制器名称及其所有连接的数据 + 文件名。一切正常,除了我的 JS GoogleMaps API 大喊:

TypeError: this.clusterer is undefined

问题是 - 我再次尝试预编译我的资产,我搜索了所有文件但找不到答案。 你知道所有资产都在哪里 held/changed 被抽成吗?我应该去哪里寻找答案?

我的控制器:

def index
    @hunts = Hunt.all
    @hash = Gmaps4rails.build_markers(@hunts) do |hunt, marker|
        marker.lat hunt.latitude
        marker.lng hunt.longitude
        marker.infowindow hunt.email
    end
end

查看:

<script src="//maps.google.com/maps/api/js?v=3.13&amp;sensor=false&amp;libraries=geometry" type="text/javascript"></script>
<script src='//google-maps-utility-library-v3.googlecode.com/svn/tags/markerclustererplus/2.0.14/src/markerclusterer_packed.js' type='text/javascript'></script>

<%= javascript_include_tag 'hunt_map'%>

和 JS:

handler = Gmaps.build('Google');
handler.buildMap(
  { 
  provider: { 
    center: new google.maps.LatLng(50.0636153, 19.9317813), 
    zoom: 13
  }, 
  internal: { id: 'map' }
  }, 
  function(){
    markers = handler.addMarkers(<%=raw @hash.to_json %>);
    handler.fitMapToBounds();
    handler.addCircles(
      [{ lat: 50.0636153, lng: 19.9317813, radius: 5}],
      { strokeColor: "#000" });

  });
handler.addMarkers([
    {
      "lat": 50.0636153,
      "lng": 19.9317813,
      "picture": {
        "url": "http://www.tamu.edu/faculty/ccbn/dewitt/adp/resources/images/shamrock.gif",
        "width":  36,
        "height": 36
      },
      "infowindow": "Treasure lies here!"
    }
 ]);

更新: 我的 config/initializers/assets.rb

Rails.application.config.assets.version = '1.0'
Rails.application.config.assets.precompile += %w( hunt_map.js )

您无法将数据传递给位于 assets 的 JavaScript。这就是为什么你在地图上看不到你的点数,因为 nil 是在这一行

中传递的
markers = handler.addMarkers(<%=raw @hash.to_json %>);

解决您问题的最简单方法是将那个 js 直接放在 viewer 中。为了以更优雅的方式制作它,请检查此 railcast episode.

发生此 TypeError: this.clusterer is undefined 是因为您试图在 function(){...} 之外调用 handler.addMarkers(...)。只需将其移回那里,错误就会消失。