Путаница в отношении использования @ в классах представления платформы Play

В основном я догадываюсь, как использовать @ в Play. Следующий код компилируется, если у меня нет пробела между if и (, но не иначе. Кроме того, мне пришлось использовать @ для if, но не для else или закрывающих фигурных скобок.

Вопросы:

  1. Разве я не должен использовать @ для всего кода, написанного на Scala?

  2. Каковы правила использования @ в представлении платформы Play?

Это не компилируется:

@if (userForm.value.isDefined) { 

Это делает:

@if(userForm.value.isDefined) {
          <h1>@userForm.get.name (userForm.get.age)</h1>
          <h2>Lives at @userForm.get.address.fullStreet</h2>
        **} else { //no @ required!**
            <h1>Feed User Data</h1>
            @helper.form(action=routes.Data.post){
            @helper.inputText(userForm("name"))
            <input type="submit" name="send" value="submit"/>
            } **//no @ required for closing braces!**
        }

person Manu Chadha    schedule 07.01.2017    source источник
comment
В шаблонах twirl @xxxx начинает блок кода scala, поэтому вам не нужно снова использовать @ внутри него.   -  person sarveshseri    schedule 07.01.2017
comment
Вы можете обратиться к этой документации.   -  person Bla...    schedule 07.01.2017
comment
шаблоны ужасны и в некоторых случаях не работают, как вы увидите на собственном опыте. но посмотрите документацию playframework.com/documentation/2.5.x/ScalaTemplates   -  person pedrorijo91    schedule 07.01.2017


Ответы (1)


Специальный символ @ в языке шаблонов часто называют магический символ или twirl (аналогично механизму шаблонов Play). Поскольку документация указывает на начало динамического оператора.

Разве я не должен использовать @ для всего кода, написанного на Scala?

Нет, только для начала динамического оператора. Как вы уже заметили, вам не нужен магический символ @ для блока else, так как он является частью оператора if.

Каковы правила использования @ в представлении платформы Play?

Единственное правило, которое я могу придумать, это то, что нет необходимости явно закрывать динамические операторы. Кроме того, не забывайте экранировать @ с помощью @@, например. john@@doe.com.

Узнайте больше о механизме шаблонов Play и распространенные варианты использования.

person Matthias A. Eckhart    schedule 07.01.2017