我的HAML读到:
%table.screenshots
%thead
%trow
%td{:colspan => 12} Screenshots for #{element.name}
%tbody
- screenshots.each do |set|
%tr
- set[1].each do |shot|
- if shot == :blank_cell
%td{:colspan => set[0]}.twelfth
- else
%td{:colspan => set[0]}.twelfth
= image_tag(shot[1]) # <= ERROR APPEARS HERE
- if @redacted
%h1.blur
%span Image blurred in
%br
%span demo report only
%p #{shot[0]}
.twelfth
之后没有不可见的空格或标签。
为什么我会收到此错误?
Illegal nesting: content can't be both given on the same line as %td and nested within it.
顺便说一下,我跑的时候遇到同样的例外:
haml --debug print.html.haml
答案 0 :(得分:0)
通过将违规行更改为:
来解决此问题%td{:colspan => set[0], :class => "twelfth"}
看起来HAML解释器中存在一个错误
答案 1 :(得分:0)
类和标识符(.
和#
)必须位于标记名称之后,并且在任何属性哈希之前。
在你的代码中,问题就在于:
%td{:colspan => set[0]}.twelfth
这被解释为td
元素,其colspan
属性包含内容.twelfth
,在呈现时看起来像这样,如果它本身就是:
<td colspan='7'>.twelfth</td>
但是这行也有嵌套在下面的内容,这是Haml不允许的。
您可以通过在your answer中使用属性哈希中的显式class
条目,或者通过在属性哈希前面移动.twelth
类说明符来解决此问题,例如这样:
%th.twelfth{:colspan => set[0]}