0

Rails 3.0.9 バージョンと jquery を使用しています。データベースなしでこの宝石を使用しています。地図表示のみに使用し、その上にKMLファイルを表示します。このために私は使用しました:

<div id='ajax_map'>
    <% @kmlurl="http://mysite/file1.kml" %>
    <%= gmaps( :kml => { :data => "[{ url: #{@kmlurl.inspect}}]" } ) %>
</div>

すべての素晴らしいショー。

リンク (@ kmlurl) を変更してボタンをクリックすると、この新しい KML ファイルでマップが更新されます。次のコードで別のアクション js.erb を使用します。

$('#ajax_map').html('<%= @kmlurl="http://mysite/file2.kml" %>'+'<br />'+'<%= gmaps( :kml => { :data => "[{ url: #{@kmlurl.inspect}}]" } ) %>');

しかし、彼は DIV を更新しません。「js.erb」は正常にレンダリングされ、gmaps() のメソッドを使用せずに、通常は @kmlurl を返します。タグの「.Html.erb」でこの同じコードをテストしたところ、新しいファイルが読み込まれましたが、もちろん、ページが読み込まれたときだけです。どうすればこの問題を解決できますか?

4

2 に答える 2

0

まず、少しリファクタリングします。

コードの最初のビットがインデックスページにあったとしましょう。@kmlurlの設定を対応するコントローラーアクションに移動します。

def index
   @kmlurl = "http://mysite/file1.kml"
end

次に(インデックスを想定しますか?)インデックスビューは単純に次のようになります。

<div id="ajax_map">
  <%= gmaps( :kml => { :data => "[{ url: #{@kmlurl}}]" } ) %>
</div>

次に、マップを更新するリンクを追加します。

<%= link_to 'Other Map', '/othermap', :remote=>true %>

次に、routes.rbにルートを作成します。

match '/othermap' => 'foo#othermap'

次に、foo_controller.rbで:

def othermap
  @kmlurl = "http://mysite/file2.kml"
end

次に、othermap.js.erbを作成します。

$('#ajax_map').html(
  '<%= 
    escape_javascript(
      gmaps( :kml => { :data => "[{ url: #{@kmlurl}}]" } )
    )
   %>'
  )

これは簡単な修正ですが、私が本当に行うことは、ビューコードをできるだけ単純にし、コントローラーで実際のすべての作業を行うように努めることです。理想的には、あなたの見解は次のようになります。

<div id="ajax_map">
  <%= gmaps( :kml => { :data => @mapdata } ) %>
</div>

コントローラで必要に応じて@mapdataを設定します。ビューコードに埋め込まれたコントローラーに実際に属するものが多すぎます!othermap.js.erbも同様に単純化する必要があります。すなわち

$('#ajax_map').html('<%= escape_javascript(gmaps( :kml => { :data => @mapdata } ))%>')
于 2012-05-07T00:35:52.677 に答える