要素のクラスと 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でどのように書くことができるかということです?
可能性の 1 つは、文字列ではなくハッシュを返すようにメソッドを書き直して、Haml ソースの要素の属性ハッシュでメソッドを使用できるようにすることです。
def cell_class
#compute the values as needed
{:class => 'cell center_right', :id => 'cell_23'}
end
その後、ハムルで:
%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>
これを行う必要がある場合は、次のように、要素の生成を担当するヘルパーを作成する可能性があります。
# 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...
または、次のように、1 つのヘルパーがクラスを返し、別のヘルパーが ID を返すようにすることもできます。
%td{ class: cell_class_helper(object), id: cell_id_helper(object) }
content
さらに良いことに、私が最初に試したのは、CSS を再構築して、HAML のオブジェクト参照機能を利用して、次のように記述できるようにすることです。
%td[object]
content
構文が正しくなれば、簡単であることがわかりました。
%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 が提供する優れたルビー ハッシュ表記に頼ることです。