精简模板中的作用域迭代变量在缩进时不存在



我有以下.slim模板:

.row
.col-md-12.col-lg3
.col-md-6.col-lg3
.panel.panel-default.list-panel
.panel-heading
h3.panel-title Some Title
.panel.body
ul
- @host_domains.each do |host, domains|
li
h4 for host: #{host} #{domains}
ul
- domains.each do |domain|
li
= domain

@host_domains的值设置为测试值:

@host_domains = {
'some_host' => %w[www.google.com facebook.com screwyou.com],
'some_other_host' => %w[www.google.com facebook.com screwyou.com]
}

问题是,当它开始在domains上迭代时,我会得到错误undefined local variable or method 'domains'。我知道它存在,因为它在我添加域的前一行(h4 for host: #{host} #{domains}(上没有出错,看看它是否会出错(它没有(。

当我尝试对作用域迭代变量domains进行迭代时,它为什么不存在

这可能是我没有看到的小东西。

EDIT:删除ul标记并将其对齐可以修复无变量问题。这个问题肯定与缩进有关,将ul标记更改为div仍然会导致相同的错误。

编辑:我有理由相信这个问题很小,它忽略了缩进。

如果我更改模板,使其看起来更像这样:

- @host_domains.each do |host, domains|
li
h4 For host: #{host}
- domains.each do |domain|
li #{domain}

然后查看生成的html,我可以看到,它不是在li标签中放置一堆li标签,而是将域li标签放在它应该位于的li标签旁边。

那么问题是,slim就是不尊重压痕,只是随心所欲地移动东西,这不是它应该做的。

Slim不尊重缩进结构,因此您必须通过将内部ul/li标记包装在div标记中来强制它这样做。

像这样:

- @host_domains.each do |host, domains|
li
h4 For host: #{host}
div
ul
- domains.each do |domain|
li #{domain}

最新更新