Ale*_*dre 6 haml ruby-on-rails-3
以下代码正在运行
-@items.each do |item|
%tr
%td
=item.quantity
times
%td= item.product.title
end
Run Code Online (Sandbox Code Playgroud)
但是我想用{ }
而不是do ... end
.可能吗?
-@items.each { |item|
%tr
%td
=item.quantity
times
%td= item.product.title
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,它会引发异常.我做错了什么?
mat*_*att 13
在您的工作示例中,该end
行被视为原始文本,并将包含在您的输出中.这是有效的,因为您实际上没有end
关键字.如果你将这一行更改为- end
- 即添加连字符(并确保你的缩进正确) - 你会看到如下错误:
Syntax error on line 9: You don't need to use "- end" in Haml. Un-indent to close a block:
- if foo?
%strong Foo!
- else
Not foo.
%p This line is un-indented, so it isn't part of the "if" block
Run Code Online (Sandbox Code Playgroud)
请注意,Haml并不总是end
仅禁用关键字end
.您可以将它们与语句修饰符一起使用,例如:
- @things.each do |thing|
%p= thing.to_s
-end unless @dont_show_things
Run Code Online (Sandbox Code Playgroud)
或者如果你想利用块的结果:
= @things.map do |thing|
- do_something_with(thing)
-end.join(",")
Run Code Online (Sandbox Code Playgroud)
至于使用{}
,你不能.当Haml将模板编译为Ruby时,添加硬编码字符串end
以根据需要关闭任何块.有可能修改Haml以便能够使用do..end
或{}
,但额外的复杂性可能不值得.这种方式更适合do...end
用于多行块和{}
单行块的常用Ruby习惯用法.
如果{}
由于运算符优先级的某些问题需要使用,则可能是创建辅助方法的标志.您的Haml模板(或任何语言的模板)不是复杂逻辑的最佳位置,最好将其转换为真正的Ruby文件.
你不要把任何东西end
放在HAML中.缩进是语义的.因此,您的代码应该是:
- @items.each do |item|
%tr
%td
= item.quantity
times
%td= item.product.title
Run Code Online (Sandbox Code Playgroud)
编辑:使用{
将抛出语法错误.
归档时间: |
|
查看次数: |
15742 次 |
最近记录: |