21

我正在尝试了解play 2 scala 教程中为表单模板助手提供的说明。我陷入了“编写自己的字段构造函数”部分。它提供了一个示例模板(没有说明文件的名称应该是什么):

@(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 和它的文档是新的,所以我不确定我错过了什么非常明显的东西。

谢谢!

4

3 回答 3

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 包中)。

于 2013-08-04T02:40:24.797 回答
10

在本教程中,此代码与文本一起:

通常您需要编写自己的字段构造函数。首先编写一个模板,例如:

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

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

查看 Play 的示例,Forms 示例使用与 Twitter 引导程序类似的方法。

于 2012-05-01T08:26:37.633 回答
0

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

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

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

您还可以查看 Play 源以获取更多示例: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

于 2014-07-31T18:41:50.937 回答