1

我的一个视图中有一个 html.erb 文件。该文件非常大,大约有 2/3 的 javascript 代码和 1/3 的 html。我不喜欢这个文件太杂乱。javascript 部分主要是事件处理程序和 jquery UI 组件的使用,例如日期选择器、对话框等,用于页面中的相应 html 元素。我想将 javascript 部分与 html 部分分开。

  1. 我可以将 javascript 移动到一个单独的 js.erb 文件并像部分一样使用它吗?这样做有什么好处?

  2. 当我使用 I18n.() 和 <%= form_authenticity_token %> 之类的 Rails API 时,如何将 javascript 移动到静态 .js 文件。我应该每次都将它们传递给包装 javascript 函数吗?有一个更好的方法吗?

  3. 如果我将 javascript 从 html.erb 文件中移出,它将有助于缓存/呈现 html.erb 页面吗?

有兴趣了解是否有任何可重复使用的模式

html.erb 文件上的示例代码:

 <% content_for :javascript do %>
 <script type="text/javascript">

 $(document).ready(function() 
 {
     $('#create_segment_dialog').dialog({
            title: "<%= I18n.t("segment.create_segment_title") %>",

     // lots of javascript


 }

 </script>
 <%end %>

 //HTML starts here

 <div id="right-column">
4

1 回答 1

3

我的 2c,但我知道对此有不同的看法:

尝试将尽可能多的 JS 代码分离成一个或多个函数,然后将它们放入资产管道中的 JS 文件中。利用这一举措将您的 JS 分解为可被其他方法/控制器使用的可重用组件。

这意味着您可以为移到那里的 JS 获得资产管道的所有好处:

  • 缓存和指纹识别您的 JS 资产
  • 缩小和压缩支持以节省带宽
  • 如果这是您想要的,则缩小以混淆您的代码
  • 连接 JS 文件以减少浏览器必须发出的请求数
  • 可以从其他位置(CDN、Web 层与应用层)提供资产
  • 如果该 JavaScript 被其他方法/控制器使用,则改进 DRYness

缺点?正如您所指出的,任何 Rails 变量都必须作为参数传递给函数。

将您的 JavaScript 移动到 .js.erb 部分是一种选择,但如果此代码非常特定于特定方法或控制器,那么它不一定会提高 DRYness - 通过分离 HTML 和 JS,它可能会使您的代码更具可读性.

于 2012-11-05T01:49:29.137 回答