Шаблон Scala не может токенизировать атрибут HTML?

Я бы хотел, чтобы условие Scala внутри HTML-атрибута "class" анализировалось, но шаблон Scala не играет в мяч:

@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>

Предложения с благодарностью


person Chris Beach    schedule 11.02.2013    source источник
comment
Похоже, вам не хватает некоторых знаков @ (@{if...}). Я удивлен, что содержимое div £1 вместо всей строки if.   -  person Carsten    schedule 12.02.2013
comment
@Carsten спасибо за ответ, но, к сожалению, добавление знака @ не помогает. Выдает HTML: class=priceTag @{if(amount.toDouble == 0.0d) БЕСПЛАТНО}   -  person Chris Beach    schedule 12.02.2013
comment
Ах да, я не увидел второй знак @ в первой строке. написать ответ   -  person Carsten    schedule 12.02.2013


Ответы (2)


В вашем коде несколько ошибок. Они просто скрывают друг друга. :-)

Пройдемся по ним:

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

Конструкция @{ ... } означает, что все, что находится внутри фигурных скобок, является блоком кода Scala. Это не вызывает ошибку, потому что ваш блок,

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

на самом деле является действительным кодом Scala (из-за XML-литералов Scala). Просто Scala распознает 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". Вы, конечно, можете оставить их, если хотите, но они не обязательны.

person Carsten    schedule 12.02.2013
comment
Большое спасибо за ответ и объяснение. Отлично решает мою проблему - person Chris Beach; 12.02.2013

Я новичок в scala, но оператор if для меня неверен, я бы пошел с:

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

Or:

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