新手问题 rails 中只对一个页面有效的 js 一般写在哪里?

victorjames · 2012年07月04日 · 最后由 wwwicbd 回复于 2018年04月20日 · 14 次阅读

比如说users下面的show.html.erb,加载这个show页面的时候执行一段js,把这段js放到show页面里可以,但是不想和js和html都混到一个页面里边去,能不能放到assets下面,而且又只对show页面其左右?

共收到 7 条回复

可以是可以,但从缓存的角度出发,其实还是推荐通过asset pipeline一股脑儿一起加载。

@victorjames

使用content_for以及yield,可以参照ruby-china,全站的stylesheet以及js都是这么组织的。

楼上说的都对。

如果一定要对一个页面有效,建议看一下using-nested-layouts相关资料 http://guides.rubyonrails.org/layouts_and_rendering.html#using-nested-layouts

我是喜欢给每个 controller 定一个 base 模板,所有的 action 都调用它。里面就可以写针对 controller 级公共的代码,比如 css,js 引用,二级菜单,面包屑... 当时还给 Rails 提过 pull request 让 scaffold 生成 view 的时候多生成个 _base.html.erb 的文件,结果被拒,原因是,这是个别的需求

我在学习rails,用的是 5.0版本,也是刚刚解决这个问题。在assets目录下,找到,application.js和application.css两个文件,把里面的require_tree删除。然后把你需要引用的js或css在config/initialize/assets.rb文件中注册下,如Rails.application.config.assets.precompile += %w(index.css),最后在html页面中使用 <%=stylesheet_link_tag "index" %>即可引用该css样式了

网站有一个welcome页面, 是独立设计的, 跟其他页面差别很大, 我是这样做的:

assets/javascript 中新建 welcome.js, 在 application.js 按需引入

添加预处理配置: config/initializers/assets.rb

Rails.application.config.assets.precompile += %w( welcome.js welcome.css  )
``
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册