0

在 PHP 中,我可以这样做:

<div class="foo <?php if($a) echo "bar"; ?>">
<?php if ($b) echo "</div>"; ?>

这非常方便。我可以在任何地方、任何引号之间、任何 HTML 符号之间、在任何我想要的地方打断字符串。

我需要在 Ruby-HTML 中实现相同的功能。我正在尝试将 PHP 项目移植到 Ruby。我使用 Slim 模板语言。我试过这个但它不起作用,Slim 抛出错误:

<div class="foo
- if (x == 1)
  = bar
"></div>

目前对于 Slim,我只知道一种方法:

- if (a == true)
   <div class="foo"></div>
- else
   <div class="foo bar"></div>

首先,复制。其次,我的 HTML-PHP 部分代码相当复杂。它有两个循环(其中的for循环和foreach循环),我使用多个这样的嵌入来根据条件添加 div 的属性。只是无法想象如何用 Slim 实现它。即使为此它也会引发错误,我无法打破长 html 字符串:

- if(i != 5)
  <div class="foo bar" 
  id="item_#{i}" 
  style="background-color:red;" 
  data-im="baz">
  </div>
- else

Slim 是否允许if在引号或元素属性之间使用条件 s 断开字符串?怎么做?

4

1 回答 1

2

如果您使用的是 Rails,您可以自由地以ActionView::Helpers这种方式提供便利:

= content_tag :li, class: ( a == true ? "foo bar" : "foo") do
  inside div

否则,您可以自由创建一些辅助方法来为您涵盖此逻辑

然而,在视图中包含大量逻辑被认为是一种不良做法。考虑使用一些Presenter pattern

编辑。

查看一些苗条的文档发现您可以通过这种方式实现您的目标

div.foo class="#{'bar' if a == true}"
  | Text inside div
于 2013-04-08T04:58:29.523 回答