1
chloerei 2011-09-12 20:02:35 +08:00
首先application.js去掉 require_tree . 然后具体指定需要全局使用的js。现在的 applicaton.js 里面的默认规则就像以前的默认路由一样,让你了解 assets pipeline是做什么的,迟早会注释掉。
然后特定的 controller 需要特定的 js,再建对应的 js 文件,然后引入页面。 |
2
stranbird OP @chloerei 就是说我还得用content_for来指定assets?
话说这样其实application除了require一些vendor的assets之外,就不需要require啥了,这个pipeline完全没意义嘛。 |
3
chloerei 2011-09-12 20:21:07 +08:00
@stranbird 我觉得还是要 content_for
缺省一点可以在 layout 里面写 javascript_include_tags "applications", controller_name 但是我觉得这样不好,实际中也还没需要一个 controller 一个 js,所以 Rails 默认模板也没这么搞。 pipeline 是个很好的工具,引入 js 库变得很干净了(比如 client_side_validations),打包 js 也变得方便。但这东西不是天顶星科技,Release Notes 里面其实也就占很小篇幅。 |
6
stranbird OP @chloerei 那你现在是怎么做的呢? 用content_for还是给那些dom取个好点的不会冲突的名字?
现在约莫有点理解我师傅说的所谓jquery会污染全局变量是什么意思了。 |
8
chloerei 2011-09-12 20:44:43 +08:00
@stranbird 其实跟原来的没啥变化吧。
你遇到的问题好像是某个页面特定的 js 跟全局的 applications.js 一起打包导致了别的页面受到干扰?解决方案是不要把特定页面的 js 打包到 applications.js。 我用 content_for,js 逻辑只出现在需要他的地方。 jQuery 有个不冲突模式,也就是不改写 $ 全局变量。 |