Как определить тег с Play 2.0?

Документация о движке шаблонов Word 2.0 немного.

Как создать тег с помощью шаблона Scala?

Ответы

Ответ 1

Механизм шаблонов в игре 2.0 напрямую поступает из модуля воспроизведения 1.0 scala. Если вы все еще задаетесь вопросом, какие преимущества делает функциональный язык, такой как scala, приводит к картине, хорошо это, безусловно, одна из областей, где он сияет.

Демонстрация:

В синтаксисе scala тег - это не что иное, как вызов функции. что интересно, что фрагменты html считаются самими функциями, что позволяет использовать самые мощные конструкции замещения.

Определите html-страницу под названием mytag.scala.html

Файл: приложения/просмотров/mytags/mytag.scala.html

@(level:String = "error", index: Int)(body: (String) => Html)

@level match {

    case "success" => {
        <p class="success" index="@index">
            @body("green")
        </p>
    }

    case "warning" => {
        <p class="warning" index="@index">
            @body("orange")
        </p>
    }

    case "error" => {
        <p class="error" index="@index">
            @body("red")
        </p>
    }    
}

Тег выше принимает 3 параметра в 2 различных группах параметров:

  • Уровень, представленный строкой (по умолчанию "ошибка" )
  • Индекс
  • Наконец, функция называется body, которая принимает строковый параметр и возвращает HTML-код. Обратите внимание, что тело определено в собственной группе параметров. это эквивалентно тому, что мы знаем в j2ee как фрагмент jsp.

Теперь посмотрим, как мы можем использовать этот тег:

@import views.mytags._

@mytag("error",2) { color =>
    Oops, something is <span style="color:@color">wrong</span>
}

Прежде чем мы сможем использовать тег (или функцию), нам нужно сообщить Игроку о том, где он находится: это цель оператора import. Обратите внимание, что местоположение (путь) файла тега не имеет значения, если вы настраиваете местоположение импорта, как и в пакетах Java.

Выполняет сам вызов, который является простым. Обратите внимание, однако, что мы передаем параметризованный фрагмент html в тег.

Для получения дополнительной информации вы можете найти документацию scala на этом URL

Play 2.0 в конечном итоге будет иметь собственную документацию.

Ответ 2

Полностью ненужный ответ, но только для обучения моего scala. Разве это не будет работать и быть короче, когда будет ясно?

@(level:String = "error", index: Int)(body: (String) => Html)

<p class="@level" index="@index">
    @body(
       @level match {
         case "success" => "green"
         case "warning" => "orange"
         case "error" => "red"
       }
    )
</p>

Ответ 3

Я получаю ошибку компилятора, когда я использовал первый пример. Удалите "виды". в процессе импорта решена проблема

использовать @import mytags._

Полный пример (http://www.playframework.com/documentation/2.1.1/JavaTemplateUseCases):

Let’s write a simple views/tags/notice.scala.html 
tag that displays an HTML notice:

@(level: String = "error")(body: (String) => Html)

@level match {

  case "success" => {
    <p class="success">
      @body("green")
    </p>
  }

  case "warning" => {
    <p class="warning">
      @body("orange")
    </p>
  }

  case "error" => {
    <p class="error">
      @body("red")
    </p>
  }

}

И теперь давайте использовать его из другого шаблона:

@import tags._
@notice ( "error" ) {color = > Ой, что-то не так}