@implicitFields undefined和PlayFramework无法找到传递的参数

时间:2017-01-24 15:52:57

标签: scala playframework

我在实现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不起作用

1 个答案:

答案 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")