Ruby的Slim Template语言中的PHP可能性

时间:2013-04-08 01:57:39

标签: ruby template-engine slim-lang

在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来断开字符串?怎么做?

1 个答案:

答案 0 :(得分:2)

如果你正在使用Rails,你可以通过这种方式自由地ActionView::Helpers

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

另外,您可以自由地创建一些辅助方法来为您提供这种逻辑

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

修改。

调查一些slim docs发现你能够以这种方式实现目标

div.foo class="#{'bar' if a == true}"
  | Text inside div