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