我的显示方法视图中有一个链接。此链接应在后台运行此模型的创建方法,如果完成,则应更改此视图中的样式和链接。我无法管理它以从其他方法更改按钮。
查看:
<%= 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
创建.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”),但没有任何反应。