【问题标题】:Creating a custom field constructor in Play 2 (scala)在 Play 2 (scala) 中创建自定义字段构造函数
【发布时间】:2012-05-10 15:52:28
【问题描述】:

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

谢谢!

【问题讨论】:

标签: scala playframework-2.0


【解决方案1】:

我也遇到了同样的问题,我同意你的说法,文档根本不清楚......

可能的错误 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 包中)。

【讨论】:

    【解决方案2】:

    在本教程中,这段代码是沿着文本:

    通常您需要编写自己的字段构造函数。开始 编写如下模板:

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

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

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

    【讨论】:

    • 嗯,这是我尝试的第一件事,但没有成功。笔误,也许?我再试一次。谢谢!
    • 2.4 的文档建议implicit val myFields = FieldConstructor(html.xxxx.f)。我用我的其他模板在views 目录中创建了xxxx.scala.html,所以我需要implicit val myFields = FieldConstructor(views.html.xxxx.f)
    【解决方案3】:

    为了遵循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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 2023-01-22
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      相关资源
      最近更新 更多