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

У меня есть field.scala.html, который должен принимать элемент управления в качестве входных данных и отображать его.

Сейчас я делаю так:

@field("shop", "name", true) { (modelName, fieldName, required) =>
  @textInput(modelName, fieldName, required)
}

Но я бы хотел сделать так: @field("shop", "name", true)(textInput)

Я вижу 2 способа, как это можно сделать, но не уверен, что это возможно:

  1. Каким-то образом через отражение вызовите textInput.apply с соответствующими параметрами.
  2. Сделать так, чтобы textInput реализовал какой-то трейт, и для поля потребуется экземпляр этого конкретного трейта (более безопасный тип)

Может быть, есть лучший способ?


person Anton Kuzmin    schedule 18.10.2014    source источник


Ответы (1)


Шаблоны — это просто функции. Если field.scala.html принимает:

(String, String, Boolean) => Html

И textInput.Scala.html имеет следующее объявление параметра:

@(modelName: String, fieldName: String, required: Boolean)

Тогда то, что вы хотите сделать, просто сработает. Если нет, попробуйте передать textInput.apply.

person James Roper    schedule 18.10.2014
comment
Да, @field(shop, name, true)(textInput.apply) работает. Можно ли заставить шаблон реализовать трейт? - person Anton Kuzmin; 19.10.2014
comment
Я только учусь играть. Узнал о помощниках по шаблонам. Буду использовать их для написания собственных форм для создания форм angular js. - person Anton Kuzmin; 19.10.2014