Предотвратить выход шаблонизатора PlayFramework из моих строк

Я создал несколько утилит, которые помогают мне генерировать HTML, и я ссылаюсь на них в своих представлениях как @div( "class" -> "well" ){ Hello Well. }. До сих пор эти классы были подклассами NodeSeq, потому что они не экранируются. Но мне нужно избавиться от NodeSeq в верхней части моей иерархии классов, потому что xml Scala имеет недостатки и делает мой код хакерским, и потому что тогда я мог бы переключиться на Traits.

Поэтому я попытался выяснить, как предотвратить выход Play из моих Tag-объектов. Но, к сожалению, единственное правильное решение, которое я нашел, - это переопределить компилятор шаблона и попросить пользователя указать мой компилятор в его настройках Build.scala.

Но я, надеюсь, упустил из виду более простой подход?


person Taig    schedule 27.08.2013    source источник
comment
Я немного не уверен, что вы имеете в виду (пример кода для ваших помощников по тегам поможет), но моя первая мысль заключается в том, что вам нужно использовать @Html("<span>stuff that won't be escaped</span>")? Можете ли вы уточнить?   -  person Mikesname    schedule 27.08.2013
comment
Я в основном создаю собственный механизм шаблонов поверх механизма Play. Поэтому оборачивать мои звонки с помощью @Html не вариант. taig.github.io/Play-Tmpltr   -  person Taig    schedule 27.08.2013


Ответы (2)


Если ваши помощники html возвращают «Html», а не String, вам не нужно оборачивать их с помощью тега @Html в представлении.

eg

import play.api.templates.Html

def a(src: String, value: String) : Html = Html(s"<a href='$src'>$value</a>")

Будет вызываться в представлении, как показано ниже, без необходимости обертывать @Html

@a("www.example.com", "Example")
person Adam    schedule 27.08.2013
comment
Это хороший подход, но, к сожалению, мой помощник @div — это класс, который визуализируется Play через его метод toString. - person Taig; 27.08.2013

Начиная с версии 2.2.0-M1 в документации появился новый подход, который объясняет, как добавлять пользовательские форматы в механизм шаблонов. Это позволяет мне легко интегрировать мои утилиты.

Пользовательский формат шаблона: Java, Scala

person Taig    schedule 28.08.2013
comment
(обе ссылки битые) - person 6infinity8; 02.10.2018