haml class / id语法问题

时间:2012-09-20 17:41:01

标签: ruby-on-rails haml erb

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

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

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

3 个答案:

答案 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哈希表示法。