新手问题 为什么好多 rails 项目的 html 采用 slim,例如 peatio.

wcc526 · 2014年04月24日 · 最后由 ericguo 回复于 2014年12月29日 · 5523 次阅读

为什么好多 rails 项目的 html 采用 slim,例如https://github.com/peatio/peatio/tree/master/app/views/identities

slim 能很大的加快开发速度 而且生成 html 的速度不亚于 erb 并且可以让生成的 html 中去掉空格 减少传输大小同时照顾了 IE 用户

Slim 的优点:

  • 优雅的语法
    • 简短的写法,去掉结束标签而用缩进表示
    • 用 CSS 风格简写标签,例如 # 对应 ,. 对应
    • 安全
      • 默认对 HTML 自动转义,以防止 XSS
      • 支持 Rails 的 html_safe?
    • 高性能
      • 速度与 ERB / Erubis 相当
      • 与 Rails 无缝支持
    • 支持几乎所有主流框架,例如 Rails、Sinatra
    • 支持嵌入其它引擎,例如 Markdown、Textile 或其它语言,例如 Haml、Sass、CoffeeScript
    • https://github.com/ihaveu/wiki/wiki/Slim

难道就我一个人觉得 slim 看得眼花缭乱吗 = = 改 codecampo 时痛不欲生.....

#2 楼 @swordray html 转义防的不是 XSS 吗

有些语法还是适应不了,看了别人的代码得转到 shim 语法才能试验

不适应的人应该是编辑器没有用过 zencoding

#3 楼 @saiga 为什么会眼花缭乱呢 缩进对应的多整齐...

#6 楼 @zealinux zencodeing 已经改名 emmet 了...不过看和写差太多了,写的爽歪看的蛋疼

#7 楼 @zj0713001 习惯问题吧...不过说真的个人不认为这段代码可读性比 html 高

codecampo

#navbar.collapse.navbar-collapse
  ul.nav.navbar-nav
    li class=('active' if controller_name == 'users')
      a href=admin_users_path
        = t '.users'
    li class=('active' if controller_name == 'categories')
      a href=admin_categories_path
        = t '.categories'
    li class=('active' if controller_name == 'topics')
      a href=admin_topics_path
        = t '.topics'
    li class=('active' if controller_name == 'comments')
      a href=admin_comments_path
        = t '.comments'
    li class=('active' if controller_name == 'attachments')
      a href=admin_attachments_path
        = t '.attachments'

写的人挺爽的,后来维护的人天天问候前面写的人

#4 楼 @zgm 谢谢指正!

i like haml

喜欢写 HTML 和 Slim/Haml 的都有,并且双方都觉得对方的可读性差。

三种都写过的自带 erb / slim / haml 模式切换功能,无压力 😄

我们的项目已经使用了 400 多个 Slim 文件,目前 Ruby、CSS、JavaScript 开发均感觉良好。跟 @allenfantasy 一样是 ERB / Haml / Slim 逐渐升上来的,切换毫无压力。

#9 楼 @saiga 。。。这不是能弄个 helper 么……

#9 楼 @saiga 这种模块化的东西重构一下放到 partial 里就容易看多了,不然即使用 erb 来写一样很难开

render 'admins/navbar'

app/views/admins/_navbar.slim

#navbar.collapse.navbar-collapse
  ul.nav.navbar-nav
    - %w(users categories topics comments attachments).each do |c|
      li class=('active' if controller_name == c)
        a href=send(:"admin_#{c}_path")
          = t ".#{c}"

#17 楼 @aptx4869 这段代码是在很短的模板文件 admin.html.slim 中,加了个 partial 应该不会有多少改善。其实关键是逻辑与标签混在一起了,实在没办法一眼就区分出来

用了 silm 感觉很痛苦

@shooter 要有一个熟悉和坚持的过程才行。

#9 楼 @saiga

还可以写成这样。

#navbar.collapse.navbar-collapse
  ul.nav.navbar-nav
    li class=('active' if controller_name == 'users')
      a href=admin_users_path = t('.users')
    li class=('active' if controller_name == 'categories')
      a href=admin_categories_path = t('.categories')
    li class=('active' if controller_name == 'topics')
      a href=admin_topics_path = t('.topics')
    li class=('active' if controller_name == 'comments')
      a href=admin_comments_path = t('.comments')
    li class=('active' if controller_name == 'attachments')
      a href=admin_attachments_path = t('.attachments')
需要 登录 后方可回复, 如果你还没有账号请 注册新账号