rails3.1怎么组织assets比较好

2011-09-12 19:37:51 +08:00
 stranbird
比如js代码该怎么放?因为现在是统一会编译之后扔在每个页面的头头,用jquery的时候常常会在不是它该作用的页面选到不该有的元素,然后一团糟。

但是如果是每个页面写一些原生的js代码,这样一来就不能写coffeescript,二来感觉代码又非常分散(之前遇到了类似的情况,找一个bug要从十几个文件里边找T T)。既然有pipeline,这样肯定不是最佳实践,我还是很笃行rails的哲学的——它让我怎么干,怎么干就比较好。

求解。
6701 次点击
所在节点    Ruby
11 条回复
chloerei
2011-09-12 20:02:35 +08:00
首先application.js去掉 require_tree . 然后具体指定需要全局使用的js。现在的 applicaton.js 里面的默认规则就像以前的默认路由一样,让你了解 assets pipeline是做什么的,迟早会注释掉。

然后特定的 controller 需要特定的 js,再建对应的 js 文件,然后引入页面。
stranbird
2011-09-12 20:07:55 +08:00
@chloerei 就是说我还得用content_for来指定assets?
话说这样其实application除了require一些vendor的assets之外,就不需要require啥了,这个pipeline完全没意义嘛。
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 里面其实也就占很小篇幅。
stranbird
2011-09-12 20:37:16 +08:00
@chloerei 你在说什么..
chloerei
2011-09-12 20:38:06 +08:00
@stranbird 问哪一行?
stranbird
2011-09-12 20:38:27 +08:00
@chloerei 那你现在是怎么做的呢? 用content_for还是给那些dom取个好点的不会冲突的名字?
现在约莫有点理解我师傅说的所谓jquery会污染全局变量是什么意思了。
stranbird
2011-09-12 20:39:36 +08:00
@chloerei pipeline对库的管理应该说是好的,但是自己写的js代码真心不知道怎么处理。
chloerei
2011-09-12 20:44:43 +08:00
@stranbird 其实跟原来的没啥变化吧。

你遇到的问题好像是某个页面特定的 js 跟全局的 applications.js 一起打包导致了别的页面受到干扰?解决方案是不要把特定页面的 js 打包到 applications.js。

我用 content_for,js 逻辑只出现在需要他的地方。

jQuery 有个不冲突模式,也就是不改写 $ 全局变量。
stranbird
2011-09-12 20:54:34 +08:00
@chloerei 对对。
但是不打包的话,仿佛就只能写原生的js,不能写coffeescript了
chloerei
2011-09-12 21:07:25 +08:00
@stranbird 不是,比如 assets/javascript 下面有这几个文件

applications.js
topics.js.coffee
settings.js.coffee

当你用 javascript_include_tag 'topics' 的时候,topics.js.coffee 就会被编译输出为 js。

打包需要声明宏,跟编译是两个过程。
stranbird
2011-09-12 21:15:57 +08:00
@chloerei 原来这样子,非常感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/18043

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX