【问题标题】:HAML - parameter with dashHAML - 带破折号的参数
【发布时间】:2012-07-15 15:17:39
【问题描述】:

如何转换这一行

  <body data-spy="abcd">

到 HAML 语法?

这个返回一个错误

  %body{:data-spy => "abcd"}

【问题讨论】:

  • 由于连字符而引发错误。只需将连字符的字符串用引号括起来:%body{:'data-spy' =&gt; "abcd"}

标签: html haml


【解决方案1】:

HTML5 数据字段的 HAML 语法:

%div{ :data => {:id => '555'} }

现在,我开始搞砸了,看起来这只适用于“数据”——其他标签需要:

%div{ "star-datas" => "hello!" }

你的例子:

%body{:data => { :spy => 'abcd'}}

【讨论】:

  • 使用此语法时遇到问题,因为我需要“data-0”而 :0 不是有效符号,所以我将语法更改为 :data =&gt; {'spy' =&gt; 'abcd'}
  • 任何东西都可以是一个符号。如果它本身无效,只需将其括在引号中并在前面加上一个冒号:{ :'0' =&gt; 'this is a symbol', :'so-is-this' =&gt; true }
【解决方案2】:

我不知道为什么我没有首先发布这个。在 HAML 中编写标签 &lt;body data-spy="abcd"&gt; 的“正确”方法是完全跳过 {} 并使用 ()

%body(data-spy="abcd")

如果您没有像 Ruby 一样评估属性的值,则根本不应该使用 {:key =&gt; value} 语法。对于静态 HTML 属性,请坚持使用 (key="value")


原答案:

HAML 具有处理数据属性的特定语法,CrazyVipa's answer 总结得很好。

为了完整起见,我将指出,您也可以在此处和 Ruby 中您想在符号中使用连字符的任何其他地方使用带引号的符号语法:

%body{ :"data-spy" => "abcd" }

一般来说,:"text" 等同于"text".to_sym,允许您的符号包含通常由于解析器限制而不能包含的字符。以下均为有效符号:

:"symbol with spaces"
:"symbol-with-hyphens"
:"symbol
with
newlines"
:"def my_func(); puts 'ok'; end"

请注意,带引号的符号适用于 Ruby 1.9 的新哈希语法:

{ :"key-1" => "value" } # works in 1.8/1.9
{ "key-1": "value" }  # syntax error

【讨论】:

  • 确实完整。谢谢!
  • Ruby1.9+ 新的哈希语法写法会是什么?
  • @YoLudke %div{ data: {id: '555'} }
  • 我的意思是 key-1 的例子 -> %div{ data: { :"key-1" =&gt; "value" }}in Ruby 1.9+ new has syntax
  • @YoLudke 您不能对该符号使用新语法。在任何版本的 Ruby 中,你都会写 :"key-1" =&gt; "value"
【解决方案3】:

对于 HAML ruby​​ 编译器:

%div{data: {some_hyphenated_id: 'value'}}

并且 HAML 会自动将下划线转换为连字符,所以我得到:

<div data-some-hyphenated-id="value"></div>

仅供参考:如果您需要空属性,只需使用 true 而不是 'value'

示例:

哈姆:

%div{data: {topbar: true}}
%div{data: {image_carousel: true}}

HTML:

<div data-topbar></div>
<div data-image-carousel></div>

更具体地说,此语法对 ruby haml gem 以及将 language 设置为 ruby 的 grunt 任务 grunt-haml 有效(需要提到 ruby安装了haml gem)

【讨论】:

  • data-topbar 是我想要的。谢谢。
猜你喜欢
  • 2021-11-09
  • 2016-03-18
  • 2020-07-07
  • 1970-01-01
  • 2019-04-22
  • 2020-09-05
  • 2021-10-20
  • 1970-01-01
  • 2020-11-25
相关资源
最近更新 更多