0

我正在使用 geocomplete 输入#create表单的地址字段。谷歌地图 api 加载在头部。

<head>
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=<%= ENV['DEV_MAPS_API_KEY'] %>&libraries=places">  </script>
</head>

应用程序.js.erb

$(document).ready(function(){
    $("#gig_location").geocomplete();
});

这在页面加载时效果很好,如果我刷新页面,我也没有任何问题。

如果有表格错误,就会出现问题。我正在使用render :new所以输入的表单字段不会丢失,但是当页面重新加载时,我会收到Uncaught ReferenceError: google is not defined错误消息。

Gig_controller.rb

  def create 
      .....code....
    if @gig.save
      redirect_to @gig
      flash[:success] = "Gig created successfully"
    else
      @errors = @gig.errors
      @gig = Gig.new(gig_params.merge(genres: genres))
      render :new
    end
   end

如果我使用redirect_to new_gig_path它会重新加载所有内容并geocomplete正常工作,但表单输入也会被擦除。

其他 jquery 元素在render :new被调用后继续工作,只有谷歌地图 API 没有。

如何在渲染时重新加载/保存 google map api jquery :new

4

2 回答 2

0

将以下代码添加到您的 new.html.erb:

$(document).ready(function(){
    $("#gig_location").geocomplete();
})
于 2017-04-28T13:22:52.867 回答
0

我已经想通了。 render :new实际上是调用create [POST]动作,而不是new.

我的谷歌地图 api 会根据控制器和操作有条件地加载。将它们添加到gig#create动作(不仅仅是gig#new)允许它们在render :new被调用时被加载。

也许这会帮助那些在使用时遇到困难的人render :new

于 2017-05-06T19:01:34.807 回答