1

我希望计算元素的类和 id,所以我构建了一个辅助方法 cell_class(row,col),以便 cell_class(2,3) 产生

class='cell .center_right', id='cell_23'

我似乎无法弄清楚我怎么能用haml写这个?

4

3 回答 3

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 的对象引用功能,让你编写:

%td[object]
  content
于 2012-09-20T18:04:58.637 回答
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>
于 2012-09-20T20:52:13.073 回答
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​​ 哈希表示法。

于 2012-09-26T15:22:42.967 回答