【发布时间】:2017-01-12 14:47:14
【问题描述】:
我有一个带有嵌套映射列表的表单,但在模板中迭代它时遇到问题。表单看起来像这样
val assignmentForm : Form[AssignmentData] = Form(
"acceptedSign" -> nonEmptyText(),
mapping("activities" -> list (
mapping("activityId" -> optional(text),
"activityStatus" -> optional(text))
(ActivityData.apply)(ActivityData.unapply))
)(AssignmentData.apply)(AssignmentData.unapply)
)
我正在将此表单传递给模板并尝试迭代 活动。到目前为止,结果只有编译器错误或表单的完整元数据转储。
这提供了完整表单的元数据+数据转储,包括活动。 (LI 标签是一个包含输入字段的选项卡导航器)
@repeat(assignmentForm("activities")) { activity =>
<li>@activity("activityId")</li>
}
迭代某种有效(代码是否运行),但从用户的角度来看它完全不可用。
我也尝试过各种for循环,只给我编译器错误,说
value map is not a member of play.api.data.Field
我的问题是:
- 这样的表格应该可以构造吗,是怎么做的?
- 我还有哪些其他选项可以呈现具有一对多关系的输入表单?
【问题讨论】:
-
我昨天发布了这个问题:“stackoverflow.com/q/12883589/185840”并提出了一个基于元组的解决方案,您可以在其中以 formA.zip(formB) 方式@repeat 通过嵌套表单 - 可能会有所帮助.. .但不确定您在这里遇到什么问题,听起来好像正在制作表格。您确实知道您需要执行类似 @inputText(activity("activityStatus"), '_label-> "Activity Status") 的操作来生成表单域,对吧?
-
您的解决方案似乎沿着我前进的道路前进,我会尝试一下:)。关于我的问题中的输入字段:由于应该生成导航选项卡(li 元素)的迭代失败,为了简洁起见,我没有输入。
-
我发现渲染输入字段效果很好。它只生成有问题的 li 元素。如何将表单字段的值用于此类目的?
-
在“views.utils”目录中创建一个名为“li.scala.html”的自定义助手,并在您计划使用它的模板中创建“@import views.html.li”。对于文件的内容,请遵循 Play 来源“github.com/playframework/Play20/blob/master/framework/src/play/…”中的字段帮助器示例
-
然后@li("foo.bar") 访问嵌套表单内容并生成列表元素