Javascript gmaps4rails this.clusterer在this.clusterer.addMarker(marker)中未定义;

Javascript gmaps4rails this.clusterer在this.clusterer.addMarker(marker)中未定义;,javascript,ruby-on-rails-4,gmaps4rails2,Javascript,Ruby On Rails 4,Gmaps4rails2,我收到错误这个。cluster是未定义的。您可以在下面看到我的配置 预期行为:加载页面,而不是使用#search_form中定义的查询从控制器加载标记。最后,将标记添加到#映射中,并对它们进行聚类 我的js咖啡 $ -> handler = Gmaps.build('Google'); handler.buildMap { provider: {center: new google.maps.LatLng(49.639177, 9.536133),zoom: 6}, interna

我收到错误
这个。cluster
未定义的
。您可以在下面看到我的配置

预期行为:加载页面,而不是使用
#search_form
中定义的查询从控制器加载标记。最后,将标记添加到
#映射中
,并对它们进行聚类

我的js咖啡

$ ->
  handler = Gmaps.build('Google');
  handler.buildMap { provider: {center: new google.maps.LatLng(49.639177, 9.536133),zoom: 6}, internal: {id: 'map'}},
    ()->
      handler._createClusterer()

  markers = []
  placeMarkers = (data, textStatus, jqXHR) ->
    handler.removeMarkers(markers);
    markers = handler.addMarkers(data)  # <<--- here is the error

  $("#search_form").submit (e) ->
    valuesToSubmit = $(this).serialize
    $.ajax({
      url: $(this).attr("action"),
      data: valuesToSubmit,
      success: placeMarkers,
      dataType: 'json'
    })
    e.preventDefault

  $("#search_form").submit()
以及来自控制器的响应:

def index
respond_to do |format|
  format.html {}
  format.json {
    seminars = Seminar.search(params[:search])
    @markers = Gmaps4rails.build_markers(seminars) do |seminar, marker|
    return if seminar.location.is_a? String
      marker.lat seminar.location.lat
      marker.lng seminar.location.lon
      marker.infowindow render_to_string(:partial => 'seminars/seminar.html.haml', :locals => {seminar: seminar})
      marker.title seminar.course.title
      marker.json({ :id => seminar.id })
    end
    render json: @markers
  }
end

end
[{"lat":52.517,"lng":13.3889,"marker_title":"Title1","id":1},
 {"lat":51.5114,"lng":7.46517,"marker_title":"Title2","id":3}]
这是stacktrace

Gmaps.Objects.Handler.Handler.addMarker (application.js:22417)
(anonymous function) (application.js:22409)
_.map._.collect (application.js:21094)
Gmaps.Objects.Handler.Handler.addMarkers (application.js:22408)
placeMarkers (application.js:23263)
jQuery.Callbacks.fire (application.js:3049)
jQuery.Callbacks.self.fireWith (application.js:3161)
done (application.js:8236)
jQuery.ajaxTransport.send.callback (application.js:8779)

gmaps4rails-2.1.1版非常奇怪,我无法再复制它了

我认为更改是将
$(“#search_form”).submit()添加到onMapLoad处理程序中

$ ->
  handler = Gmaps.build('Google');
  handler.buildMap { provider: {center: new google.maps.LatLng(49.639177, 9.536133),zoom: 6}, internal: {id: 'map'}},
    ()->
      $("#search_form").submit()

感谢您的提示@apreading

最近也有同样的问题。基本上是@apheading所建议的:当ajax调用在buildMap的回调处理程序完成之前完成时,这是一个时间问题

解决方案:
要么只从回调处理程序内部(也称为序列化)启动ajax调用,要么我更喜欢的是:在ajax响应中通过setTimeout使用回调。这将使您的应用程序更具响应性,因为通话和处理可以并行进行。

downvote?在不到两分钟的时间里?我想你得到了否决票,因为你的问题做得不是很好。你们并没有提供足够的上下文信息,它只是一堆无关的代码,并没有stacktrace或其他任何东西。仅仅因为问题并没有被很好地表达出来而进行向下投票对新用户来说是非常令人沮丧的。会员应发表评论,并“尝试教授”新会员。添加更多信息和stacktrace。虽然我不得不说,这不是我通常使用Stackoverflow的方式。通常我扫描代码部分,几乎从不阅读周围的文本,因为代码更精确。而且解释几乎总是多余的(就像我的例子一样)。clusterer是在map load上创建的,map是在ajax调用之前加载的吗?