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