2013-02-11 62 views
0

我想在“类” HTML属性中Scala的条件进行分析,而Scala的模板是不是在玩球:Scala模板无法标记HTML属性?

@priceTag(amount: Currency) = @{ 
    <div class='priceTag {if(amount.toDouble == 0.0d) "FREE"}'> 
     {if(amount.toDouble > 0.0d) {amount.format("¤#")} else {"FREE"}} 
    </div> 
} 

产量:

<div class="priceTag {if(amount.toDouble == 0.0d) &quot;FREE&quot;}"> 
    £1 
</div> 

,我会喜欢它,以产生:

<div class="priceTag"> 
    £1 
</div> 

建议感激理解

+1

看起来你错过了一些'@'符号('@ {if ...}')。我很惊讶div的内容是'1英镑'而不是整个'if'行。 – Carsten 2013-02-11 23:20:12

+0

@Carsten感谢您的回复,但不幸的是,在那里添加@符号并没有帮助。产量HTML:class =“priceTag @ {if(amount.toDouble == 0.0d)”FREE“}” – 2013-02-12 12:07:01

+0

哦,对,我没有看到第一行中的第二个“@”符号。 *写一个答案* – Carsten 2013-02-12 16:09:06

回答

2

你的代码中有几个错误。他们只是互相隐瞒。 :-)

让我们通过他们:

@priceTag(amount: Currency) = @{ ... } 

@{ ... }结构意味着花括号内的一切是Scala代码块。这不会错误的,因为你的块,

<div class='priceTag {if(amount.toDouble == 0.0d) "FREE"}'> 
    {if(amount.toDouble > 0.0d) {amount.format("¤#")} else {"FREE"}} 
</div> 

实际上是有效的斯卡拉代码(因为斯卡拉的XML文字)。这只是斯卡拉承认priceTag {if(amount.toDouble == 0.0d) "FREE"}作为您div的类名称。

什么你可能想要做的是这样的:

@priceTag(amount: Currency) = { 
    <div class='priceTag @{if(amount.toDouble == 0.0d) "FREE"}'> 
     @{if(amount.toDouble > 0.0d) amount.format("¤#") else "FREE"} 
    </div> 
} 

注意两个if块之前的@迹象。我还删除了围绕amount.format("¤#")"FREE"的大括号。如果你愿意,你可以保留它们,但它们不是必需的。

+0

非常感谢您的答复和解释。完美解决了我的问题 – 2013-02-12 18:19:30

0

我在斯卡拉初学者,但如果声明是不正确的,我会去的:

@if(amount > 0) { 
     <div class="priceTag"> 
      @amount 
     </div> 
} else { 
     <div class="priceTag FREE"> 
      @amount 
     </div> 
} 

或者:

 <div class="priceTag @if(amount == 0) { FREE }"> 
      @amount 
     </div>