网上有很多关于使用不显眼的javascript(jquery-ujs)来创建AJAX Rails视图的精彩教程,这些视图在没有页面刷新的情况下进行更新(example)。
它的要点是你使用respond_to |format|
&&在您的控制器中format.js
,然后构建j create.js.erb
,update.js.erb
和destroy.js.erb
等javascript文件,这些文件使用jQuery替换带有渲染部分的容器的HTML。
因此,例如,destroy.js.erb
具有类似$('#table').replaceWith('<%= escape_javascript(render partial: "table") %>');
的内容,可以重新呈现现在更新的index.html.erb部分表。
它非常棒,而且我很喜欢使用它。
问题是,只要我必须从2个不同的视图执行相同的操作(例如,destroy
操作),所有这些简单性就会逐渐消失。
例如:不仅可以从index.html.erb
进行删除,而且还可以从dashboard.html.erb
(不同的操作/视图)进行删除,它具有不同的HTML结构,甚至不均匀开始时有一个<div id="table">
。
如果我想重新渲染dashboard.html.erb,我无法在我的控制器中使用render: :dashboard
,因为我正在进行destroy
操作,而且它没有&{ #39; t具有dashboard.html.erb
所需的所有逻辑和实例变量。当然我不会重复自己,但是将所有dashboard
操作逻辑提取到私有方法并在dashboard
和destroy
操作中调用它并不是一件好事。最佳实践。
我与update.js.erb
有同样的烦恼。现在有多个视图有remote:true
个链接可以更新我的模型,而且我看到自己传递了额外的参数(例如`params:{source:&#39; name_of_current_view}&#39;) link_to链接并在控制器中创建大量if / else以呈现正确的javascript响应。
处理这些情况的最佳做法是什么?