V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
stranbird
V2EX  ›  Ruby

rails3.1怎么组织assets比较好

  •  
  •   stranbird · 2011-09-12 19:37:51 +08:00 · 6701 次点击
    这是一个创建于 4847 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如js代码该怎么放?因为现在是统一会编译之后扔在每个页面的头头,用jquery的时候常常会在不是它该作用的页面选到不该有的元素,然后一团糟。

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

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

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

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

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

    jQuery 有个不冲突模式,也就是不改写 $ 全局变量。
    stranbird
        9
    stranbird  
    OP
       2011-09-12 20:54:34 +08:00
    @chloerei 对对。
    但是不打包的话,仿佛就只能写原生的js,不能写coffeescript了
    chloerei
        10
    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
        11
    stranbird  
    OP
       2011-09-12 21:15:57 +08:00
    @chloerei 原来这样子,非常感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3057 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:03 · PVG 22:03 · LAX 06:03 · JFK 09:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.