Twirl: теги / просмотры с дополнительным контентом
Я хочу создать тег с необязательным содержимым... Допустим, у меня есть тег:
app / views / tags / part.scala.html:
@(param: String)(content: Html = null)
@if(content == null) {
@param: Your tag has no content...
} else {
@param: @content
}
И я хотел бы использовать это в моих взглядах как:
@tags.part("foo"){ <b>Good!</b} }
или же
@tags.part("bar")
К сожалению, второй вызов дает мне ошибку компиляции:
отсутствующие аргументы для метода применяются в части объекта;
следуйте этому методу с `_', если вы хотите рассматривать его как частично примененную функцию
Как я могу пройти без использования @tags.part("bar"){ }
или же @tags.part("bar"){_}
(и отметьте в теге if body != "_"
)?
1 ответ
Ваш звонок:
@tags.part("bar")
это вызов карри - он возвращает функцию apply, а не объект.
Решением для вашего кода является функция вызова вызова:
@tags.part("bar")()
Если вы хотите позвонить:
@tags.part("bar")
Вы должны определить
@(param: String)(implicit content: Html)
и определить неявный HTML в контексте, или определить как
@(param: String,content: Html = null)
- но тогда надо позвонить
@tags.part("foo")(Html("<b>Good!</b>"))
что склонно к ошибкам.
Обходной путь для последнего решения - создать метод и вызвать его:
@good = {<b>Good!</b>}
@tags.part("foo")(good)