Как определить тег с помощью Play 2.0? - PullRequest
6 голосов
/ 27 октября 2011

Не так много документации о шаблонизаторе Play 2.0.

Как создать тег, используя шаблон Scala?

Ответы [ 3 ]

21 голосов
/ 27 октября 2011

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

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

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

Давайте определим страницу html с именем mytag.scala.html

file: apps / views / 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 разных группах параметров:

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

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

@import views.mytags._

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

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

Следует за самим вызовом, что довольно просто.Однако обратите внимание, что мы передаем параметризованный HTML-фрагмент в тег.

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

Play 2.0 в конечном итоге будетПриходите с собственной документацией.

5 голосов
/ 28 октября 2011

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

@(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>
0 голосов
/ 09 мая 2013

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

использовать @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 => Упс, что-то не так}

...