3

link_toshowという名前のコントローラーアクションを呼び出すために使用したいと思います。これが発生すると、200 メッセージが表示されます。divここで、返されたコンテンツでa を更新したいと思います。

コントローラーのコード:

respond_to do |format|
  format.html # show.html.erb
  format.js 
 end

ビュー内のコード、リンク、および JavaScript:

<%= link_to "Show analysis", company_comparison_path(3), :remote => true , :id => "thelink" %>

<div id="replaced"> will be replaced </div>

<script>  
$('#thelink').bind('ajax:complete', function() {  
        $('#replaced').html(data)
});  
 </script>  

HTML や JavaScript をコントローラーから JavaScript に適切に返す方法がまだ理解できていないと思います。JavaScript の「データ」という単語を括弧内のテキストに置き換えると、適切な出力が得られます。しかし、コントローラー アクションから結果を取得するにはどうすればよいでしょうか。

4

2 に答える 2

3

あなたはほとんどそこにいましたが、実際の html コンテンツが #results div に挿入したいものをバインドされた関数に伝える必要があります。.html()使用する$('#replaced')変数を呼び出すとき( data) はまだ定義されていません。

次のことを試してください。

$('#thelink').bind('ajax:complete', function(event, data) {
  $('#replaced').html(data.responseText);
}); 

編集:ああ、心に留めておくべきことは、これはおそらくあなたが望むものではないレイアウトを含むビューをレンダリングする可能性があるということです. コントローラーに次のようなものを追加render layout: false if request.xhr?して、レイアウトが ajax リクエストに表示されないようにすることができます。

于 2012-09-16T18:15:07.487 に答える
1

AJAX 応答からよりリッチなコンテンツを返したい場合は、:render_to_string メソッドによってコントローラーからビューをレンダリングできます。

詳細を参照してください: http://apidock.com/rails/ActionController/Base/render_to_string

respond_to do |format|
  format.html # show.html.erb
  format.js {
    @content = render_to_string(:partial => 'some_partial_view')
  }
 end
于 2012-09-16T18:12:13.400 に答える