Ruby on Rails的 - 渲染的部分在通过jQuery /阿贾克斯另一个View(Ruby

2019-10-17 10:22发布

我在我的演出法的视图的链接。 这个环节应该运行这种模式在后台的制作法,如果这个完成后,风格和在这个视图链接应该改变。 我不能管理它从其他方法更改按钮。

查看

      <%= 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);
    });
});

如果我试试这个,无一不发生。

它的工作原理,如果我使用下面的链接,我唯一的表演动作。

<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包含“add_to_list_default_list”)
现在,如果我点击链接变化,控制器的动作也被称为成功地(@list_operation包含“delete_from_list_default_list”),但没有任何反应。

Answer 1:

我通常做这种情况是与调用JS格式的Ajax调用,并在响应js.erb,做到这一点,

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

呈现在js.erb部分。

我想通过通过当地人所需要的情况下,你可以decalre它的控制器,两种方式均有效。



文章来源: Ruby on Rails - Render a partial in another View via jQuery/Ajax