在过去四年使用 Rails 1 和 2 后,我正在开发我的第一个“真正的”(而不是玩弄)rails 3 项目。在销毁操作的 js block 中,我想做一些典型的事情:删除页面上包含已删除资源的 div。
我无法决定是否最好像这样渲染 destroy.js.erb 文件:(有问题的资源是一个“note”,并且 .dom_id 方法仅返回一个类似于“note_#{note. id}”。)
方法A:渲染js View 文件
#in controller
format.js
#in views/notes/destroy.js.erb
$('#<%= @note.dom_id %>').remove();
这样做的优点是可以保持 Controller 完全清洁和标准。
方法B:将js放入 Controller 中:
#in controller
format.js { render :text => "$('##{@note.dom_id}').remove()" }
这样做的好处是,查看 Controller 代码的人可以立即看到正在发生的事情,而无需寻找其中包含一行代码的 View 文件。另一方面,它破坏了 MVC。
你觉得怎么样?哪个更“适当”、“标准”等等?还有第三种(第四种、第五种)更好的方法吗?
最佳答案
我倾向于遵循方法A,即使您可能只有几行代码。原因是您的队友可能看到方法 B,并决定当您需要向渲染添加更多 JavaScript 时,内联执行是正确的方法。内联 JavaScript 可以(根据我读过的内容)用于非常简单的单行代码,但即便如此,也不建议这样做。
如果您想避免四处寻找正确的 JS View 文件,您始终可以渲染特定文件,而不是遵循“文件 --> Controller 操作”命名约定。这样,您正在使用的确切 js.erb 文件在 Controller 中就清晰可见。
关于jquery - Rails 3 js block : render a partial with a jquery snippet or render snippet as text?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6057763/