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

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

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

可以是可以,但从缓存的角度出发,其实还是推荐通过 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  )
``
需要 登录 后方可回复, 如果你还没有账号请 注册新账号