[英]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.