繁体   English   中英

Ruby on Rails-通过jQuery / Ajax在另一个视图中渲染局部

[英]Ruby on Rails - Render a partial in another View via jQuery/Ajax

我的显示方法视图中有一个链接。 该链接应在后台运行此模型的创建方法,如果完成,则应更改此视图中的样式和链接。 我无法管理从其他方法更改按钮。

查看

      <%= 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”),但没有任何反应。

在这种情况下,我通常要做的是用js格式调用ajax调用,然后在响应的js.erb中执行此操作,

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

在js.erb中渲染部分。

我喜欢通过本地人传递所需的实例,您可以在控制器中对其进行除垢,无论哪种方法都可以。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM