我在我的Rails 3应用控制器remote: true
中进行HotelsController
调用,执行show_map
操作。很简单。
<%= link_to "Map", show_hotel_map_path(@hotel.id), remote: true %>
<div id="hotel_map"></div>
show_hotel_map
行动非常基本
def show_hotel_map
@hotel = Hotel.find(params[:id])
respond_to do |format|
format.html
format.js
end
end
show_hotel_map.js.erb
用于在带有渲染的Google地图地图的JQuery-UI对话框中呈现部分map
$("#hotel_map").dialog({
autoOpen: true,
height: 'auto',
width: 'auto',
modal: true,
closeOnEscape: true,
position: 'center',
resizable: false,
title: "Map",
open: function(){
$("#hotel_map").html("<%= escape_javascript(render partial: "map") %>")
}
});
_map.html.erb
partial只执行render_map
帮助
<%= render_map %>
render_map
助手通过使用Gmaps4Rails
gem
module HotelsHelper
def render_map
if @hotel.address.latitude && @hotel.address.longitude
map = @hotel.address.to_gmaps4rails
else
geo = Gmaps4rails.geocode("#{@hotel.continent.name}, #{@hotel.country.name}, #{@hotel.location.name}")[0]
map = [{lat: geo[:lat], lng: geo[:lng]}].to_json
end
gmaps(:markers => { :data => map, :options => { :draggable => true } })
end
end
问题在于Gmaps4Rails
gem会为正确的Google地图处理呈现一些javascript,但显然这个javascript正在被来自escape_javascript
视图的show_map.js.erb
调用截断。因此,当我单击"Map"
链接时,正在呈现JQuery-UI对话框,但它没有任何有效负载,因为没有执行Javascript。 render_map
助手本身完美无缺,所以我猜这对Gmaps4Rails
gem来说不是问题。是否有任何变通办法,所以我可以执行该JavaScript?我可以想到几个黑客,但也许有更多的铁路方式来做它?
谢谢!
答案 0 :(得分:0)
好的,对于它可能关心的人,我使用Gmaps4Rails wiki中描述的UJS技术解决了它
https://github.com/apneadiving/Google-Maps-for-Rails/wiki/Using-with-UJS
它不是很干,但我猜其他选择并不多。