在Play 2(scala)中创建自定义字段构造函数

时间:2012-05-01 00:53:12

标签: scala playframework-2.0

我正在尝试使用in the play 2 scala tutorial给出表单模板助手的指令。我陷入了“编写自己的字段构造函数”一节。它给出了一个示例模板(不说文件的名称应该是什么):

@(elements: helper.FieldElements)

<div class="@if(elements.hasErrors) {error}">
    <label for="@elements.id">@elements.label</label>
    <div class="input">
        @elements.input
        <span class="errors">@elements.errors.mkString(", ")</span>
        <span class="help">@elements.infos.mkString(", ")</span> 
    </div>
</div>

然后它显示了这段代码:

object MyHelpers {
  implicit val myFields = FieldConstructor(myFieldConstructorTemplate.f)    
}

我对这与模板有什么关系感到困惑。 (例如,模板文件应该被称为myFieldConstructorTemplate.scala.html?)我尝试了一些变种而没有运气。

我是scala和Play的新手,但我也知道play 2,而且它的docs是新的,所以我不确定我错过了什么非常明显的东西。

谢谢!

3 个答案:

答案 0 :(得分:17)

我刚遇到同样的问题,我同意你的意见,文件根本不清楚......

可能的错误1

not found: value FieldConstructor

这意味着您没有使用此指令导入帮助程序:

@import helper._

可能的错误2

not found: value implicitConstructor

这意味着您在模板中的错误位置声明了字段构造函数(即:在@helper.form方法中)​​。为了解决这个问题,我在导入指令之后声明了我的字段构造函数:

@import form._
@import helper._

@implicitConstructor = @{ FieldConstructor(foundation_field.render) }

(我的foundation_field.scala.html文件位于views.form包中)。

答案 1 :(得分:10)

在本教程中,此代码位于以下文本中:

  

通常你需要编写自己的字段构造函数。从一开始   写一个模板,如:

这意味着您必须创建自己的模板(xxxx.scala.html)并在其中添加该代码。之后,您可以使用他们提供的代码在模板中导入它(请记住将其添加到使用自定义字段的每个scala模板中):

@implicitField = @{ FieldConstructor(xxxx.f) }

检查Play的样本,Forms样本使用与Twitter bootstrap类似的方法。

答案 2 :(得分:0)

要遵循Scala隐式关键字的逻辑,文档也是隐含的;)

Scala和Play现在太不成熟了,因此文档很差。

此SOF答案非常好:https://stackoverflow.com/a/15268122/1163081

您还可以查看播放源以获取更多示例:https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/views/html/

或者这些人似乎发现了解决方案:https://groups.google.com/forum/#!msg/play-framework/2e1EqZJ-Qks/gXD1oo0IjfcJ