我在实现Play中的表单时面临两个问题。我在Application.scala(控制器包)
中定义了一个自定义字段构造函数object MyHelpers {
import views.html.helper.FieldConstructor
implicit val myFields = FieldConstructor(myFieldConstructor.f)
}
我在myFieldConstructor.scala.html
中创建了以下模板@(elements: helper.FieldElements)
<div class="@elements.args('class)">
<label for="@elements.id">@elements.label</label>
<div >
@elements.input
<span class="errors">@elements.errors.mkString(", ")</span>
<span class="help">@elements.infos.mkString(", ")</span>
</div>
</div>
在main.scala.html中,我导入了自定义字段构造函数,我希望以下代码可以正常工作
@import controllers.Application._
@import MyHelpers._
.
.
.
@helper.inputText(form("name"), 'class->"container", 'placeholder->"Enter name", '_label -> "What is your Name", '_help -> "First name, Last Name",
'_mycolor->"#0000FF")
但框架并没有选择我传递的参数。模板代码中的以下行不会编译,并且会给出未定义“类”的错误。
[NoSuchElementException: key not found: 'class]
@(elements: helper.FieldElements)
**<div class="@elements.args('class)">**
但是如果我将我的字段构造函数作为参数传递并重新传输import语句,那么事情就会起作用。
@*import MyHelpers._*@
.
.
@helper.inputText(form("name"), 'class->"container", 'placeholder->"Enter name", '_label -> "What is your Name", '_help -> "First name, Last Name",
'_mycolor->"#0000FF")**(handler=MyHelpers.myFields, implicitly[Lang])**
当然,我的模板仅适用于inputText,而不适用于页面中的其他元素。
问题 - 如果导入框架,框架是否应该使用我的字段构造函数?
我尝试将自定义构造函数设置为默认值,但代码没有编译
@implicitField = @{MyHelpers.myFields}
not found: value implicitField
问题 - 为什么在Play框架中提到它的使用时,implicitField不起作用
答案 0 :(得分:0)
我发现了问题。在HTML中,我有一个选择字段
@helper.select(field=form("address.country"), List(("united kingdom","UK"),("outside united kingdom","Non-UK")))
自定义字段构造函数实际上已正确设置。因为我没有在helper.select代码中传递'class,所以在尝试渲染select字段时模板代码失败了。代码用于传递'class
@helper.select(field=form("address.country"), List(("united kingdom","UK"),("outside united kingdom","Non-UK")),'class->"container")