0

hamlを使用すると、次の問題が発生します。

最初に1つの変数をチェックし、その後別の変数をレンダリングしたいのですが、それでもネストする必要があります。

説明させてください

コード:

.a
  .b

gives:   <div class=a><div class=b></div></div>

それ以外の場合にhamlを使用すると、.aの中に.bをネストできません。

- if id == 3
  .a{style => 'xxx'}
- else
  .a{style => 'yyy'}

    .b <-- 2 spaces, otherwise it fails. but 2 spaces are causing the following issue:

問題は、hamlに終わりがないため、どちらの状況でも.bを.a div内に配置する方法がわからないことです(id == 3などの場合)。

実際の実例として:

- if home != nil
  .home
    home.id
- else
  .home
    empty
- end   <--- can't use
  - if room != nil <-- without end, this will be executed only if home == nil but I wan't this to be executed always
    room.id
  - else
    empty

hamlは-endをサポートしていないので、使用できません。私がそれを使用しない場合、これらが同じ行にあるため、私が部屋の値をcehckし始めると、hamlは自動的にdivを閉じます:)

変数をnilと比較したり、変数がnilの場合にのみ何かを実行したりする例は単なる例です。ステートメント全体に適用されるように、後でインデントすることでこのような問題を解決するソリューションを探しています。

同様の質問があります:HAML:一般的なコンテンツを含むif/elseステートメントのインデント

したがって、あなたの場合、あなたは次のようにします:

.a{ :style => id == 3 ? 'xxx' : 'yyy' }
  .b

編集済みif... elsif... elsif...あなたがあなた自身のヘルパーを書くことができる場合:

.a{ :style => select_style(variable) }
  .b

#helper method
def select_style(val)
  case val
  when "3"
    "xxx"
  when "4"
    "yyy"
  else
  "zzz"
  end
end

もちろん、すべてをhamlで書くことはできますが、醜いものになります。

- if id == "3" then val="xxx"
- elsif id == "4" then val="yyy"
- else val="zzz"
.a { :style => val }
 .b

HAMLには利点がありますが、これは欠点の1つの例です。

編集

または、怒って次のようにすることもできます。

.a{:style => if var == "3" then "xxx" elsif var == "4" then "yyy" else "zzz" end}
4

2 に答える 2

2

これを試すこともできます:

- if contition
  - attrs = { class: '..', id: '..' }
- else
  - attrs = { style: '...' }

.a{attrs}
  .b
于 2012-07-10T12:34:11.457 に答える
1

同様の質問があります:HAML:一般的なコンテンツを含むif/elseステートメントのインデント

したがって、あなたの場合、あなたは次のようにします:

.a{ :style => id == 3 ? 'xxx' : 'yyy' }
  .b

編集済みif... elsif... elsif...あなたがあなた自身のヘルパーを書くことができる場合:

.a{ :style => select_style(variable) }
  .b

#helper method
def select_style(val)
  case val
  when "3"
    "xxx"
  when "4"
    "yyy"
  else
  "zzz"
  end
end

もちろん、すべてをhamlで書くことはできますが、醜いものになります。

- if id == "3" then val="xxx"
- elsif id == "4" then val="yyy"
- else val="zzz"
.a { :style => val }
 .b

HAMLには利点がありますが、これは欠点の1つの例です。

編集

または、怒って次のようにすることもできます。

.a{:style => if var == "3" then "xxx" elsif var == "4" then "yyy" else "zzz" end}
于 2012-05-26T07:35:58.120 に答える