常用的方式有两种:
1. 直接在view中写javascript代码;
2. 通过Asset Pipeline加载app/assets/javascripts
中的js文件
对于第一种方式,我的习惯做法是在app/views/layout/application.html.erb
中定义名称为javascript
的yield
,然后在需要js的view中使用content_for
插入js代码:
# app/views/layout/application.html.erb
<html>
<!-- other html code -->
<body>
<!-- other html code -->
<%= yield :javascript %>
</body>
</html>
# app/views/users/show.html.erb
<% content_for :javascript do %>
<script type="text/javascript">
(function(){
$(".edit-node").click(function(){
alert("df");
$("#edit-form").show();
return false;
});
})()
</script>
<% end %>
对于第二种方式,我们只需要在app/assets/javascripts
中定义一个js文件,写入上面的js代码就可以实现同样的效果。
# app/assets/javascripts/application.js
//= require_tree .
require_tree .
会自动加载当前目录下的所有js文件,这样一来,我们就不用在view子文件中使用javascript_include_tag
引入js文件了,如果没有上面那行代码的话,我们就要手动引入了
# app/assets/javascripts/application.js
//= require home
然后在config/initializers/assets.rb
中添加:
Rails.application.config.assets.precompile += %w( home.js )
注意:
1. 在生产环境中需要预编译资源:rake assets:precompile RAILS_ENV=production
,此命令会将app/assets
下的文件编译到public/assets
,并为它们打上指纹标记。
2. 同时使用上面两种js加载方式时,第二种优先执行。