折腾死了,大改一个 haml 模版,好痛苦啊,从未体会这么深过. 逻辑片段非常难区分,一个个找,累死了. 当然,也是因为模版里面有很多逻辑,要区分逻辑片段简直亮瞎眼!
纯吐槽下,勿喷!
我之前用过一段时间 slim,后来果断改回 ERB。
ERB 的一个重要好处就是,如果逻辑稍微有点多就很难看。这样就可以强迫你在 View 里面只写最少的逻辑。Slim 和 Haml 就没有这个问题,逻辑很流畅,但实际上很糟糕。个人还好一点,团队就更难。
另外,如果要复制一些 CSS 框架的代码,比如 Bootstrap 这些,ERB 很快。其余的要么工具转,要么手工转,总之多一道麻烦。
至于快速输入这些,编辑器加个 ZenCoding,神码都是浮云。
@blacktulip @huacnlee 我也觉得 ERB 够用了,CoffeeScript 我是觉得用 Ruby 类似的语法写 Javascript 很爽。
@tumayun @allenfantasy 说是毒药是我说的:) 也有其他的开发者有类似观点的。算是一家之言。
Helper 大致两种,一种属于 ActionController 的,一种属于 ActionView 的,还有一些两者通用的。总之 Helper 是为 ActionController 和 ActionView 服务的,不是为了业务逻辑和具体展示逻辑服务的。
Helpers 用爽了很容易就倾向于,为了简化 View,把展示逻辑包裹进一个 Helper 里面。这个确实也很方便。现行的 Helper module 也是在鼓励这种做法,比如 generator 自动生成 PostHelpers, CommentHelpers 等等。
Helpers 的滥用主要在 Viwe 上面。大量自定义 helpers 造成的结果是:
非 OOP。Helper 是属于 controller 和 view 的,本质上应该和你的 models, 和你的业务无关。
非 OOP 的另一个后果,扩展性和可变性很差。
method 泛滥,难维护。不知不觉就写了大把 helpers,稍复杂一点的 helper 还需要 private methods 支持,越来越多。展示一变动,一些 helpers 就孤立了。基本上要靠 ROP(Regex oriented programming) 维护了。
不直观。View 里面看到 helpers, 少一点还好,多了不翻代码还不知道到底输出什么东西。
总之我是尽量避免写 Helpers。我的做法是尽量用 Partials, Decorators, 通用一点的 helper 逻辑也会用 class 再加 helper 接口。实在不能避免也会写,但我发现这种情况很少。
html 页面结构一复杂、缩进一没写好以后再改再查的时候就会觉得相当恶心,经常靠数</div>
算究竟在哪个嵌套里……为了可读性一样需要缩减,那何不用 slim?如果说逻辑混入的问题,那只能说是写码习惯问题,与 slim 无关吧…slim 自动补全嵌套,避免了手勿入坑,而且少写那么多div
和<>
,写 js 和 css 的时候也一目了然……现在 js mvc 里的 temple 我都改用 slim 写了……
要是非吐槽强制缩进………那就当我没说……
1: 使用 erb 页面一般都会比 slim 渲染出来大吧。 2: 我使用 erb 一般太随意,很难看出那些不合理(没有用的)代码,代码结构也不是很清晰。
虽然有 zencoding(现在叫 emmet 了),但我还是觉得“写更少的代码”优于“敲很少的代码然后自动生成代码” 。从这点来说 slim 比 erb 好。
不过 slim 也有不爽的地方:
用过 slim 深切感受 slim 的语法没有 erb 自然,erb 和 html 一样,但 slim 就完全不同了。需要注意很多小细节,一不小心就报错。现在还是觉得 erb 好用。
#24 楼 @darkbaby123 关于 1,有编辑器支持毫无压力,比如 sublime,可以折叠整块代码段成一行,对该行缩减就可以了,默认快捷键 ctrl+shift+[
关于 2,没这个体会,举个具体例子吧
#24 楼 @darkbaby123 HTML 你要是想调换 tag 不是更麻烦。。。还得处理关闭标签……
。。。强制缩进也没办法……为了不用关闭标签的代价……不过强制缩进反而是优点吧。。。至少能保证一定的可读性
我感觉是这样的,当你需要复用一段 html 的时候尽量用 Partials, 当你需要复用一段数据,逻辑的时候,或者要输出一段字符串,你可以考虑用 Helper. 我感觉在 Helper 里写 html 代码很傻
不好,不喜欢。年轻犯下的错误,导致我现在每天都要打开 http://haml2erb.herokuapp.com
sam@sams-air:/Users/sam/web/tulip git:(master) find .|grep haml |wc
34 34 1513
还有 34 个,快了
@quakewang 1 还不知道有这一点。不过选定一堆代码 ->折叠 -> 缩进,跟选定一堆代码 -> 缩进所需要的工作量也差不多了吧。2 现在真举不出来,好久没写过 template 了,都忘光了。 @Kabie 其实把两者各有各的好。以前写 Rails template 我就只用 slim,现在写 handlebars 才又用回了 html,发现也没那么不能接受。看久了发现一层层的嵌套也挺有美感的……
#46 楼 @darkbaby123 不需要选定一堆代码,只要在你想要缩进段的开始行,按 ctrl+shift+[ 就折叠了,然后按 tab 缩进,2 个快捷键搞掉,连鼠标都不需要用。
#9 楼 @allenfantasy #7 楼 @tumayun
我觉得 Helpers 需要注意的原因在于:当你在 View 里写了一堆很烂的逻辑,你创建一个 helper,把那些很烂的逻辑移到 helper 里,就心安理得的睡觉了。换句话说,helpers 让你心安理得的写烂逻辑。