0

gmaps4rails gem を使用して、fancybox にアイテムのマップを表示したいと考えています。私は ajax 呼び出しに関する wiki のコメントに注意深く従いました。つまり、スクリプトはアプリケーション レイアウトに手動で含める必要があり、マップは JavaScript でロードする必要があります ( gem wiki を参照)。

しかし、ボックスにマップを表示することはまだ完全にはできていません。

一方、javascript で座標をハードコーディングすると、正常に動作し、ファンシーボックスにマップが表示され、マーカーが表示されます。

要約させてください。

私のインデックス ビューでは、アイテム インデックス アクションへの ajax 呼び出しがあります。

<%= link_to "Show Map", items_path(:format => :js, :show_map => true), :remote => true, :class => 'fancybox' %>

コントローラーで、マップ データを入力します。

def index
   @items=Item.all

   if params[:show_map]
       @map= @items.to_gmaps4rails
   end 
 end 

index.js.erb ファイルに、

<% if params[:show_map] %>
    var content = "<%= escape_javascript( gmaps({:last_map => false})) %>";
    $.fancybox({
            'content': content,
            'padding' : 20
        }); 
    Gmaps.map = new Gmaps4RailsGoogle();
    Gmaps.load_map = function() {
               Gmaps.map.initialize();
               Gmaps.map.markers = <%=  @map %>; 
               Gmaps.map.create_markers();
               Gmaps.map.adjustMapToBounds();
               Gmaps.map.callback();
               };  
    Gmaps.loadMaps(); 
<% else %>
 // blablabla
<% end %>

マップ オブジェクト内でマーカーが提供される場所。

これは機能せず、マップの代わりにファンシーボックスにコード自体が表示されました。何かのようなもの:

var content = "\n
\n
<\/div>\n<\/div>\n"; $.fancybox({ 'content': content, 'padding' : 20 }); Gmaps.map = new Gmaps4RailsGoogle(); Gmaps.load_map = function() {Gmaps.map.initialize(); 
//Gmaps.map.markers = [{"lat":50.294,"lng":5.857},{"lat":50.294,"lng":5.857},{"lat":50.548,"lng":4.918},{"lat":50.384,"lng":3.649},{"lat":50.384,"lng":3.649},{"lat":50.08,"lng":4.5760000000000005},{"lat":50.054,"lng":5.195}]; 
Gmaps.map.markers = [{"lat":50.8483059,"lng":4.351783999999999},{"lat":50.496,"lng":5.066},{"lat":50.11,"lng":5.003},{"lat":50.11,"lng":5.003},{"lat":50.162,"lng":5.871},{"lat":50.08,"lng":4.5760000000000005},{"lat":50.08,"lng":4.5760000000000005},{"lat":50.08,"lng":4.5760000000000005}];
 Gmaps.map.create_markers(); Gmaps.map.adjustMapToBounds(); Gmaps.map.callback(); }; Gmaps.loadMaps(); 

erb の代わりに、<%= @map %>たとえば次のようにマーカーをハードコーディングします。

Gmaps.map.markers = [{"lat":50.294,"lng":5.857},"lat":50.294,"lng":5.857},{"lat":50.548,"lng":4.918}];

できます!

json データ型の変換で何かが足りないようです。しかし、私は何がうまくいかないのかを見つける専門家ではありません。

ご協力いただきありがとうございます!

4

2 に答える 2

0

わかりました、うまくいかなかったものがあります。次の回答に感謝しますhttps://stackoverflow.com/a/12219016/1100674

次の構文を使用しているため:

Gmaps.map.markers = <%= @map%>;

私はjsonを次のようにレンダリングします:

               Gmaps.map.markers = [{&quot;lat&quot;:50.8483059,&quot;lng&quot;:4.351783999999999},{&quot;lat&quot;:50.11,&quot;lng&quot;:5.003},{&quot;lat&quot;:50.11,&quot;lng&quot;:5.003},{&quot;lat&quot;:50.08,&quot;lng&quot;:4.5760000000000005},{&quot;lat&quot;:50.08,&quot;lng&quot;:4.5760000000000005},{&quot;lat&quot;:50.08,&quot;lng&quot;:4.5760000000000005},{&quot;lat&quot;:50.413,&quot;lng&quot;:4.371}];

私はこのraw()方法を使用しますが、

Gmaps.map.markers = <%= raw(@map)%>;

正しいフォーマットを取得しました。

               Gmaps.map.markers = [{"lat":50.8483059,"lng":4.351783999999999},{"lat":50.11,"lng":5.003},{"lat":50.11,"lng":5.003},{"lat":50.08,"lng":4.5760000000000005},{"lat":50.08,"lng":4.5760000000000005},{"lat":50.08,"lng":4.5760000000000005},{"lat":50.413,"lng":4.371}];
于 2012-10-31T21:30:13.623 に答える
0

正常に試行されました:

<a href="#test" class="fancybox">Open</a>

<div id="test" style="display:none;width:300px;">
  <%= gmaps markers: { data: @json } , last_map: false %>
</div>

<script type="text/javascript">
$(".fancybox").fancybox({
    openEffect  : 'none',
    closeEffect : 'none',
    afterLoad   : function() { Gmaps.loadMaps(); }
});
</script>
于 2012-10-28T10:16:36.883 に答える