21

Slim-langの条件に基づいてHTMLの一部にcssクラスを割り当てたい

私は次のことをしています

- if current_user
  .title
- else
  .title_else

上記のクラスの1つにネストする必要があるHTMLをどのように記述できますか?if条件と条件の両方でHTMLを記述する必要がありelseますか?

その理由は、上記のクラスの1つにネストする必要があるHTMLは、さらに右向きに意図されている必要があるためです。しかし、私がそれをさらに正しく意図するならば、それは他の条件の下で含まれています。私は今これにどのようにアプローチしますか?

4

3 に答える 3

34

これがワンライナーです:

.thing class=(current_user ? 'large-menu' : 'medium-menu')
  h4 Same content, different class
于 2013-04-11T13:44:37.583 に答える
18

2つの属性を切り替えているだけなので、TiagoFrancoの答えは確かにあなたの目的には十分です。ただし、便利な別の方法があります。

を使用captureしてHTMLをローカル変数にレンダリングし、そのコンテンツを任意の制御構造内に埋め込むことができます。したがって、ラッピングコンテンツがもう少し複雑な場合は、次のようにします。

- shared_content = capture do
  div This is displayed regardless of the wrapper
- if current_user
  | You're logged in!
  .title
    = shared_content
- else
  | You're not logged in!
  .title_else
    = shared_content

利用可能なURLがある場合は、これを使用してコンテンツをリンクでラップします。

- image = capture do
  img src=image_url
- if url.blank?
  = image
- else
  a href=url = image  
于 2015-01-09T21:07:09.757 に答える
3

1)はい、HTMLを異なるものにしたいので、作成した両方のdivにHTMLを書き込む必要があります。あなたがそれを変えたくないのなら、if声明の必要はありません!

2)私はあなたの主張を本当に理解していませんでしたが、このコードは私と完全にうまく機能しました:

- if true
  .title
    h4 True is true!
- else
  .title_else
    h4 True is not true!

このコードは、divのクラス.titleとその中h4のテキストを含むを示してTrue is true!います。

編集:さて、今私はあなたが何を意味するのかわかります!h4をレンダリングしないため、このようなことはできません

- if true
  .title
- else
  .title_else

    h4 Same content, different class

パーシャルをレンダリングして、両方の条件の内側からそのパーシャルをレンダリングできるヘルパーを作成することをお勧めします。これは、その1つを部分的に記述し、それを2回呼び出すだけでよいことを意味します。

- if true
  .title
    = render 'footer'
- else
  .title_else
    = render 'footer'
于 2013-01-11T11:28:30.567 に答える