[英]Rails remote delete and update view through Ajax
過去,每當我想通過 Ajax 更新視圖的一部分時,我都會執行以下操作:
#tracks
remove_track
更新所有值等並添加format.js
remove_track.js.erb
,其中包含如下內容: $('#tracks').html("<%=j render 'cds/show_tracks' %>");
remote: true
。 所有這一切都很好,但現在我正嘗試使用常規的destroy
方法來刪除和更新公共index
視圖以獲得靈活性,這意味着我可以通過 Ajax 或正常調用此方法。 我認為這是一件很常見的事情,必須有比上述所有方法更好的方法。
我可以通過簡單地將其放入控制器來獲取 destroy 方法來調用我的destroy.js.erb
文件:
format.js { layout: false }
當然,在鏈接上設置remote: true
。
我不能做的是讓視圖刷新。 我要刷新的表被封裝在一個具有唯一 ID 的 div 中,但由於它不是局部的,因此它拒絕刷新內容。 也許我錯過了一些東西。
我注定要創建一個部分並使用上述方法刷新它,還是有更神奇的方法(除了使用 Turbolinks)?
謝謝。
PS另外,我剛剛注意到這有一個額外的缺點,即我無法將其余的參數傳遞給 destroy 方法,因為它只傳遞對象 ID 以使用常規 CRUD 路由進行銷毀。 如果我嘗試使用platform(action: destroy)
或platform(method: delete)
我會收到錯誤消息:
No route matches {:action=>"destroy", :controller=>"platforms"}
這意味着如果我想傳遞這些參數,我必須創建一個新路由......
所有這一切的另一個缺點是,我在銷毀方法中再次重復了索引方法中的所有搜索和排序邏輯。 我確定這絕對不是這樣做的方法。
感謝這個頁面,我找到了正確的方法。 如此簡單有效。
http://carmennorahgraydean.blogspot.com.es/2012/10/rails-328-ajax-super-basic-example.html
更新 index.html.erb 中的 destroy 行:
<%= link_to 'Destroy', pony, method: :delete, data: { confirm: 'Are you sure?' }, :remote => true, :class => 'delete_pony' %>
創建一個文件,destroy.js.erb,把它放在你的其他 .erb 文件旁邊(在 app/views/ponies 下)。 它應該是這樣的:
$('.delete_pony').bind('ajax:success', function() { $(this).closest('tr').fadeOut(); });
將 format.js { render :layout => false } 添加到您的控制器:
respond_to do |format| format.html { redirect_to ponies_url } format.json { head :no_content } format.js { render :layout => false } end
希望這對其他人有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.