1

show-method のビューにリンクがあります。このリンクは、このモデルの create-method をバックグラウンドで実行する必要があります。これが完了すると、このビューのスタイルとリンクが変更されます。他の方法からボタンを変更することはできません。

ビュー:

      <%= div_for @movie do %>
        <p class="p p-details">
          <div class="default_list">
            <span class="label label-info">
              <%= link_to "Add to Movie List", movies_path(:add_to_list => "default_list", :mashupdb_id => @movie.mashupdb_id),:method => "post", :remote => true, :class =>"a a-label" %>
            </span>
          </div>
        </p>
      <% end %>

コントローラー作成アクション:

  respond_to do |format|
    format.html do
      if request.xhr?
        render :partial => "movies/delete_from_default_list", :layout => "movies/show", :status => :created
      end
    end
    format.json { render :json =>  @movie }
  end

jQuery:

jQuery(function($) {
    // Callback for rendering via HTML
    $('.movie a[data-type=html]').on('ajax:success', function(event, data, status, xhr) {
        $(this).parents('div.movie').find('.label-info').replaceWith(data);
    });
});

これを試してみると、ノッティングが発生します。

以下のリンクと show-action のみを使用すると機能します。

<span class="label label-info">
  <%= link_to "Add to Movie List", @movies, :remote => true, :class =>"a a-label" %>
</span>

別のコントローラーからパーシャルをレンダリングすることは可能ですか? 他に何ができますか?

編集:

今、js.erb ファイルでリンクを変更しようとしています。

変更されたコントローラー:

  respond_to do |format|
    format.html
    format.js { render :content_type => 'text/javascript' }
    format.json { render :json =>  @movie }
  end

create.js.erb:

if ('<%= @list_operation.eql?('add_to_list_default_list') %>'){
    $('#<%= dom_id(@movie) %> .default_list').html('<%= raw escape_javascript( render ("movies/delete_from_default_list") )%>');
}
else if ('<%= @list_operation.eql?('delete_from_list_default_list') %>'){
    $('#<%= dom_id(@movie) %> .default_list').html('<%= raw escape_javascript( render ("movies/add_to_default_list") )%>');
}

部分的な_delete_from_default_list.html.erb

<span class="label label-important">
  <%= link_to "Delete from Movie List", movies_path(:delete_from_list => "default_list", :mashupdb_id => @movie.mashupdb_id),:method => "post", :remote => true, :class =>"a a-label" %>
</span>

部分的な _add_to_default_list.html.erb

<span class="label label-info">
  <%= link_to "Add to Movie List", movies_path(:add_to_list => "default_list", :mashupdb_id => @movie.mashupdb_id),:method => "post", :remote => true, :class =>"a a-label" %>
</span>


リンクを初めてクリックすると、js , erb ファイルが実行され、ビューの内容が変更されます。list_operation には "delete_from_list_default_list" が含まれています) が、何も起こりません。

4

1 に答える 1

1

この状況で私が通常行うことは、js 形式で ajax 呼び出しを呼び出し、応答する js.erb でこれを行うことです。

$('xxxx').html("<%= raw escape_javascript( render :file => "xxxx/xxxx", :locals => { xxx: xxx ) %>");

js.erb でパーシャルをレンダリングします。

必要なインスタンスをローカル経由で渡すのが好きです。コントローラでそれを宣言するだけで、どちらの方法でも機能します。

于 2012-11-22T02:33:06.693 に答える