我正在尝试使用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是新的,所以我不确定我错过了什么非常明显的东西。
谢谢!
答案 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