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)
Другие вопросы по тегам