0

アクションを実行するremote: trueRails 3 app controller に呼び出しがあります。ものすごく単純。HotelsControllershow_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.erbmapレンダリングされた Google マップ マップを使用して、JQuery-UI ダイアログ内でパーシャルをレンダリングするためのものです。

$("#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.erbpartial はrender_mapヘルパーを実行するだけで何もしません

<%= render_map %>

render_mapGmaps4Railsヘルパーは、 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

問題は、Gmaps4Railsgem が適切な Google マップの処理のためにいくつかの JavaScript をレンダリングすることですが、明らかにこの JavaScript はビューescape_javascriptからの呼び出し によって切り詰められていshow_map.js.erbます。リンクをクリックする"Map"と、JQuery-UI ダイアログがレンダリングされますが、Javascript が実行されていないため、ペイロードはありません。helper はそれ自体で完全に機能するため、 gemrender_mapでは問題ないと思います。Gmaps4RailsそのJavaScriptを実行できるようにするための回避策はありますか? いくつかのハックを思いつくことができますが、もっと Rail っぽい方法があるのではないでしょうか?

ありがとうございました!

4

1 に答える 1

0

さて、誰に関係があるかもしれませんが、Gmaps4Rails wiki で説明されている UJS 手法を使用して解決しました

https://github.com/apneadiving/Google-Maps-for-Rails/wiki/Using-with-UJS

あまりドライではありませんが、他に選択肢はあまりないと思います。

于 2012-06-30T06:14:16.177 に答える