Rails haml slim 之流真的好吗?

tumayun · 2014年04月24日 · 最后由 tiseheaini 回复于 2014年05月03日 · 7621 次阅读

折腾死了,大改一个 haml 模版, 好痛苦啊,从未体会这么深过. 逻辑片段非常难区分,一个个找,累死了. 当然,也是因为模版里面有很多逻辑,要区分逻辑片段简直亮瞎眼!

纯吐槽下,勿喷!

共收到 60 条回复

erb 党撸过点赞

不喜欢这些,一直 ERB 不过话说回来,为何 SCSS 和 CoffeeScript 我能接受呢?!

我之前用过一段时间 slim,后来果断改回 ERB。

ERB 的一个重要好处就是,如果逻辑稍微有点多就很难看。这样就可以强迫你在 View 里面只写最少的逻辑。 Slim 和 Haml 就没有这个问题,逻辑很流畅,但实际上很糟糕。个人还好一点,团队就更难。

另外,如果要复制一些 CSS 框架的代码,比如 Bootstrap 这些,ERB 很快。其余的要么工具转,要么手工转,总之多一道麻烦。

至于快速输入这些,编辑器加个 ZenCoding,神码都是浮云。

@blacktulip @huacnlee 我也觉得 ERB 够用了, CoffeeScript 我是觉得用 Ruby 类似的语法写 Javascript 很爽.

多分 partial……多用 helper……

反正相同的 HTML 只可能更乱。。。我是不能理解怎么会有人喜欢看一片一片的原生 HTML……

@Kabie Helper 是毒药,除开全局 helper,别的最好少用。至于看 HTML, 那是审美观不同啦,哈哈。

@billy 为啥 helper 是毒药? 第一次听到这种说法

同 erb 党 +1 slim 还是没办法习惯

#6 楼 @billy 同问 helper 是毒药的原因……

一直用 erb,从前端转为后端开发,erb 更直观一点,另外不喜欢完全靠缩进来控制代码 SASS 这个着实能提高编写效率

写 erb 和 slim 没感觉到差别... 项目里也是 slim 和 erb 混写,但个人坚持认为强迫缩进的语法就是反人类

没有任何感觉,哪个合适用哪个

@tumayun @allenfantasy 说是毒药是我说的:) 也有其他的开发者有类似观点的。算是一家之言。

Helper 大致两种,一种属于 ActionController 的,一种属于 ActionView 的,还有一些两者通用的。总之 Helper 是为 ActionController 和 ActionView 服务的,不是为了业务逻辑和具体展示逻辑服务的。

Helpers 用爽了很容易就倾向于,为了简化 View,把展示逻辑包裹进一个 Helper 里面。这个确实也很方便。现行的 Helper module 也是在鼓励这种做法,比如 generator 自动生成 PostHelpers, CommentHelpers 等等。

Helpers 的滥用主要在 Viwe 上面。大量自定义 helpers 造成的结果是:

  1. 非 OOP。Helper 是属于 controller 和 view 的,本质上应该和你的 models, 和你的业务无关。

  2. 非 OOP 的另一个后果,扩展性和可变性很差。

  3. method 泛滥, 难维护。不知不觉就写了大把 helpers,稍复杂一点的 helper 还需要 private methods 支持,越来越多。展示一变动,一些 helpers 就孤立了。基本上要靠 ROP(Regex oriented programming) 维护了。

  4. 不直观。View 里面看到 helpers, 少一点还好,多了不翻代码还不知道到底输出什么东西。

总之我是尽量避免写 Helpers。我的做法是尽量用 Partials, Decorators, 通用一点的 helper 逻辑也会用 class 再加 helper 接口。实在不能避免也会写,但我发现这种情况很少。

有工具帮你 DRY 难道还不好吗?

之流是贬义词吗?

反正我是觉得 Slim 的缩进式写法方便到爆,至少不用一直按 shift 键了😆

我也喜欢 erb ,奇怪,我还是喜欢 python 的人呢。

html 页面结构一复杂、缩进一没写好以后再改再查的时候就会觉得相当恶心,经常靠数</div>算究竟在哪个嵌套里……为了可读性一样需要缩减,那何不用 slim?如果说逻辑混入的问题,那只能说是写码习惯问题,与 slim 无关吧…slim 自动补全嵌套,避免了手勿入坑,而且少写那么多div<>,写 js 和 css 的时候也一目了然……现在 js mvc 里的 temple 我都改用 slim 写了…… 要是非吐槽强制缩进………那就当我没说……

erb 或 slim,不過我第一時間想到的是 erb……

有 emmet 的情况下我肯定喜欢 erb

1: 使用 erb 页面一般都会比 slim 渲染出来大吧。 2: 我使用 erb 一般太随意,很难看出那些不合理(没有用的)代码,代码结构也不是很清晰。

虽然有 zencoding (现在叫 emmet 了),但我还是觉得 “写更少的代码” 优于 “敲很少的代码然后自动生成代码” 。从这点来说 slim 比 erb 好。

不过 slim 也有不爽的地方:

  1. 强制缩进,不缩进就报错。最终的代码确实应该严格缩进,但有时写 html 需要反复改写标签的嵌套关系去尝试最好的方案,用 slim 就导致删除一个 div 就必须调整里面的所有标签的缩进。在试验过程中比较烦人。
  2. 写多个 inline 标签,或者 text 和标签混用总觉得像在 hack 。这点用过 slim 的都有感受吧……

用过 slim 深切感受 slim 的语法没有 erb 自然,erb 和 html 一样,但 slim 就完全不同了。需要注意很多小细节,一不小心就报错。现在还是觉得 erb 好用。

#24 楼 @darkbaby123 关于 1, 有编辑器支持毫无压力,比如 sublime,可以折叠整块代码段成一行,对该行缩减就可以了,默认快捷键 ctrl+shift+[

关于 2,没这个体会,举个具体例子吧

#24 楼 @darkbaby123 HTML 你要是想调换 tag 不是更麻烦。。。还得处理关闭标签……

。。。强制缩进也没办法……为了不用关闭标签的代价……不过强制缩进反而是优点吧。。。至少能保证一定的可读性

一直在用 ERB,让 @zhangyuan 来评论一下 slim

erb 比较好理解 。。所以一直用

好。每次维护 erb 就很想死。

把 haml 转回 erb,再继续。

我感觉是这样的, 当你需要复用一段 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 个,快了

就是不想打括号。结果 slim 是我唯一选择。

大段的 slim 可以折行啊 没有什么问题的 难道不用折行么...

还是感觉 ERB 看起来直观,清晰明了

其实我是觉得用 slim 很难直观的分辨出一个 div 到底包含哪些代码, div 内代码少还好, 代码一多就要吐血.

当然好了,slim 是 ruby 的节奏啊

用 slim 的时候要在脑海中编译成 html,需要付出双份的脑力劳动

从 Jade 到 Slim 再自然不过 强制缩进 对于强迫症 不是问题

从不用。

erb 和 slim 混用!slim 检错痛苦,但是写起来效率的确高很多!

写时 emmet 就够了。看的时候,html 更清晰。

+1 可读性大大提高

比较喜欢 haml,还有 coffeescript、sass!

@quakewang 1 还不知道有这一点。不过选定一堆代码 ->折叠 -> 缩进,跟选定一堆代码 -> 缩进所需要的工作量也差不多了吧。2 现在真举不出来,好久没写过 template 了,都忘光了。 @Kabie 其实把两者各有各的好。以前写 Rails template 我就只用 slim ,现在写 handlebars 才又用回了 html ,发现也没那么不能接受。看久了发现一层层的嵌套也挺有美感的……

slim 非常高效,如果觉得不方便,还是没用到位。跟 coffeescript 一个道理。

#46 楼 @darkbaby123 不需要选定一堆代码,只要在你想要缩进段的开始行,按 ctrl+shift+[ 就折叠了,然后按 tab 缩进,2 个快捷键搞掉,连鼠标都不需要用。

#48 楼 @quakewang 我一般是Ctrl+Shift+J直接选缩进层……

不喜欢这些,一直 ERB

#47 楼 @administrator 比复制还高效吗?

ERB 正道!

存在即有道理。你这样质问也说明它很流行。 推荐一个工具: http://htmltohaml.com/

slim 吧,用完之后很难再回到原生 html 了 撸过 n 年 php+ 前端的飘过~

haml 用的爱不释手,你干嘛要改啊,rails 自动生成的啊!rails-haml

erb + zen-coding 足矣

#9 楼 @allenfantasy #7 楼 @tumayun

我觉得 Helpers 需要注意的原因在于:当你在 View 里写了一堆很烂的逻辑,你创建一个 helper,把那些很烂的逻辑移到 helper 里,就心安理得的睡觉了。换句话说,helpers 让你心安理得的写烂逻辑。

用哪个顺手就用哪个,时间很宝贵,用宝贵的时间来纠结这样的问题一点都不值得。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册