Rails不显眼的AJAX视图:对不同的视图使用相同的控制器操作和js.erb文件

时间:2017-06-04 22:46:01

标签: ruby-on-rails

网上有很多关于使用不显眼的javascript(jquery-ujs)来创建AJAX Rails视图的精彩教程,这些视图在没有页面刷新的情况下进行更新(example)。

它的要点是你使用respond_to |format|&&在您的控制器中format.js,然后构建j create.js.erbupdate.js.erbdestroy.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操作逻辑提取到私有方法并在dashboarddestroy操作中调用它并不是一件好事。最佳实践。

我与update.js.erb有同样的烦恼。现在有多个视图有remote:true个链接可以更新我的模型,而且我看到自己传递了额外的参数(例如`params:{source:&#39; name_of_current_view}&#39;) link_to链接并在控制器中创建大量if / else以呈现正确的javascript响应。

处理这些情况的最佳做法是什么?

0 个答案:

没有答案