slim-lang的if-else嵌套代码

时间:2012-12-20 07:38:31

标签: ruby-on-rails

我想根据slim-lang中的条件为一部分HTML分配一个css类

我正在做以下

- if current_user
  .title
- else
  .title_else

现在我如何编写应该嵌套在上面一个类中的HTML?我是否需要在if条件和else条件下编写HTML?

原因是应该嵌套在上述类之一中的HTML应该是向右的。但是,如果我打算进一步正确,它包括在其他情况下。我现在怎么看待这个?

3 个答案:

答案 0 :(得分:32)

这是一个班轮:

.thing class=(current_user ? 'large-menu' : 'medium-menu')
  h4 Same content, different class

答案 1 :(得分:17)

由于您只是在两个属性之间切换,Tiago Franco's answer肯定足以满足您的需求。但是,还有另一种方法可以派上用场。

您可以使用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

如果有可用的网址,我会经常使用它来将内容包装在链接中:

- image = capture do
  img src=image_url
- if url.blank?
  = image
- else
  a href=url = image  

答案 2 :(得分:3)

1)是的,您需要将HTML写入两个创建的div中,因为您希望它们不同。如果您不希望它有所不同,则不需要if语句!

2)我真的不明白你的意思,但这段代码对我来说非常好:

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

此代码显示div.titleh4,其中包含文字True is true!

编辑:好的,现在我明白你的意思了! NOT 可以做这样的事情,因为它不会渲染h4!

- if true
  .title
- else
  .title_else

    h4 Same content, different class

我建议你写一个帮助器,它允许你渲染局部,然后从两个条件内部渲染部分。这意味着你只需要写一个部分并调用它两次。

- if true
  .title
    = render 'footer'
- else
  .title_else
    = render 'footer'