我希望计算一个元素的类和id,所以我构造了一个辅助方法,cell_class(row,col),以便cell_class(2,3)生成
class='cell .center_right', id='cell_23'
我似乎无法弄清楚我怎么能用haml写这个?
答案 0 :(得分:1)
如果我必须这样做,我可能会让助手负责生成元素,例如:
# in app/helpers/some_helper.rb
module SomeHelper
def some_tag(object, &block)
haml_tag('td', class: 'cell center_right', id: 'cell_23') {
yield
}
end
end
# in app/views/some/view.html.haml
- some_tag(object) do
...content inside tag...
或者,您可以让一个助手返回该类,另一个返回ID,如:
%td{ class: cell_class_helper(object), id: cell_id_helper(object) }
content
更好 - 我要尝试的第一件事 - 你可以重新构建你的CSS以利用HAML的object reference功能,让你写:
%td[object]
content
答案 1 :(得分:1)
一种可能性是重写您的方法以返回哈希而不是字符串,然后您可以在Haml源中元素的属性哈希中使用该方法:
def cell_class
#compute the values as needed
{:class => 'cell center_right', :id => 'cell_23'}
end
然后在Haml:
%div{cell_class}
产生
<div class='cell center_right' id='cell_23'></div>
请注意,Haml语法与Ruby语法不同 - {cell_class}
不是有效的Ruby哈希值,但您可以在Haml中使用它。
从方法返回的哈希内容将合并到您在Haml中指定的任何其他属性中:
.another_class{cell_class}
产生
<div class='another_class cell center_right' id='cell_23'></div>
答案 2 :(得分:0)
嗯,一旦我的语法正确,结果很简单:
%div {class: #{cell_class(row, col)}", id: #{cell_id(row, col)}")
行= 2,单元格= 5,我得到:
<div class='center_center' id='cell_25'>
</div>
正是我想要的。
给我的教训是避免混淆sass表示法(“。cell .center_center”)和haml快捷键(“。cell”),并依赖于haml提供的漂亮的ruby哈希表示法。