我希望计算元素的类和 id,所以我构建了一个辅助方法 cell_class(row,col),以便 cell_class(2,3) 产生
class='cell .center_right', id='cell_23'
我似乎无法弄清楚我怎么能用haml写这个?
我希望计算元素的类和 id,所以我构建了一个辅助方法 cell_class(row,col),以便 cell_class(2,3) 产生
class='cell .center_right', id='cell_23'
我似乎无法弄清楚我怎么能用haml写这个?
如果我必须这样做,我可能会让助手负责生成元素,例如:
# 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 的对象引用功能,让你编写:
%td[object]
content
一种可能性是重写您的方法以返回哈希而不是字符串,然后您可以在 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>
好吧,一旦我的语法正确,结果就很容易了:
%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 哈希表示法。