jquery - Rails 3 js block : render a partial with a jquery snippet or render snippet as text?

标签 jquery ruby-on-rails-3

在过去四年使用 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/

相关文章:

jQuery show() 面板不工作

ruby-on-rails-3 - Rails 3fields_for-排序顺序丢失

ruby-on-rails - RoR 缓存如何工作?

ruby-on-rails - 未定义的方法 `each' 为 "":String with update_attributes

jquery - 底部导航栏一键显示/隐藏 - CSS

php - JSON 中的 foreach 函数只返回一行

javascript - 如何在使用setTimeout()时停止累积?

javascript - 将 ArrayList 转换为 JavaScript 表

ruby-on-rails-3 - Ruby 调试器在 Windows 上崩溃

ruby-on-rails - Rails 3.0 引擎 - 在 ActionController 中执行代码