21

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

我正在做以下事情

- if current_user
  .title
- else
  .title_else

现在我如何编写应该嵌套在上述类之一中的 HTML?我需要在if条件和else条件下编写 HTML 吗?

原因是应该嵌套在上述类之一中的 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

由于您只是在两个属性之间切换,因此Tiago Franco 的答案肯定足以满足您的目的。但是,还有另一种派上用场的方法。

您可以使用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,因为您希望它有所不同。如果您不希望它有所不同,则无需if声明!

2)我不太明白你的意思,但这段代码对我来说很好用:

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

这段代码显示了一个div带有一个类的.titlea 和一个h4带有其中文本的 a True is true!

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

- if true
  .title
- else
  .title_else

    h4 Same content, different class

我建议您编写一个助手,它允许您渲染部分,然后只从两个条件内渲染该部分。这意味着您只需编写一个部分并调用它两次。

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