你如何在Rails 3中组织javascript文件?

时间:2011-07-14 21:23:01

标签: javascript jquery ruby-on-rails ruby-on-rails-3 unobtrusive-javascript

我在Rails 3中编写了一个Web应用程序,我正在使用JQuery作为我的Javascript框架。我在应用程序中没有大量的javascript但是我开始在页面之间添加转换,我想知道是否有一种使用[function] .js.erb文件来组织转换的好方法。例如,我有一个带有新功能和编辑功能的邀请控制器。有没有办法使用views / invitations / new.js.erb和views / invitations / edit.js.erb在文档准备好后运行函数?现在我只是在AJAX调用之后使用它们来处理页面操作。

谢谢!

2 个答案:

答案 0 :(得分:1)

js.erb文件只适用于您之前使用过的文件:ajax或js调用。

我不推荐它:这应该是客户端恕我直言。此外,它将在3.1中移开Rails(仍作为宝石保存)。

你应该简单地将你的js放在你在视图中加载的文件中:basic&整齐。

答案 1 :(得分:1)

我同意apneadiving ..个人而言,js.erb调用会增加很多认知开销。我所做的是将我的javvavscripts加载到布局部分

*应用/视图/布局/ _javascripts.html.haml

= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"
= javascript_include_tag 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js'
= javascript_include_tag "http://yui.yahooapis.com/3.3.0/build/yui/yui-min.js" 
= include_javascripts :app
= hoptoad_javascript_notifier
= yield :javascripts

然后我使用Jammit gem中的jammit命令进行minifiy,并压缩我的js和css资产

配置/ assets.yml

javascripts:
  app:
    - public/javascripts/rail.js
    - public/javascripts/underscore-min.js
    - public/javascripts/jquery.dump.js
    - public/javascrippts/etc*.js

对于每个页面需要自定义页面级别的js,我在页面底部抛出一个content_for :javascripts块:

应用程序/视图/东西/ awesome.html.haml

%h1 cool page
Other cool stuff

- content_for :javascripts do
  :javascript
    $(document).ready(function(){
      console.log('This document is REaDY!! and, this page rocks');
      $.ajax({
         url: "#{new_item_path(@item)}",   //ruby is evaluated due to string interpolation
         success: function(data) {
           console.log('Loaded ' + data + ' from ' + #{new_item_path(@item)})
         } 
      });
    };

这样我就可以访问render 'layouts/javascripts'布局底部的application.html.haml,并将所有javascript网格传送到页面底部,从而加快页面加载速度{{3}这也允许我使用erb从Rails生成页面级js的变量(如果需要)