游戏框架 - 一个Form
问题描述:
的多个实例,我有一出戏模板看起来像这样:游戏框架 - 一个Form
@(projects: List[Project], projectForm: Form[Project])
@import helper._
@main("Create projects") {
<div class="accordion">
@for(project <- projects) {
<h3>@project.name</h3>
<div>
@form(routes.Application.updateProject(project.getId), 'class -> "ajaxForm") {
@* I'm not even sure why I need to specify the FQN of Map here *@
@defining(projectForm.bind(scala.collection.mutable.Map("name" -> project.name,
"description" -> project.description))) { form =>
@inputText(form("name"))
@textarea(form("description"))
<input type="submit" value="Update"/>
}
}
</div>
}
</div>
@form(routes.Application.createProject()) {
<fieldset>
<legend>Create a new project</legend>
@inputText(projectForm("name"))
@textarea(projectForm("description"))
<input value="create" type="submit"/>
</fieldset>
}
}
Project
是包含long id
和String name
和description
的典范。
我在这里的问题是,这里
@inputText(form("name"), 'value -> project.name)
@textarea(form("description"))
的的inputText和textarea的始终获得IDS name
和description
分别。我有许多这些,所以这些ID不再是唯一的。这仍然适用于Chrome,但我知道ID必须在文档中是唯一的。 Play中是否有内置的方式来处理这类问题,还是必须提出一个自己的解决方案?如果是后者,你是否对如何解决这个问题有一些建议?或者我在做一些根本性错误?
答
您可以使用该项目的列表索引和它添加到id
:
@for((project, index) <- projects.zipWithIndex) {
<h3>@project.name</h3>
<div>
@form(routes.Application.updateProject(project.getId), 'class -> "ajaxForm") {
@defining(projectForm.bind(scala.collection.mutable.Map(
"name" -> project.name,
"description" -> project.description))) { form =>
@inputText(form("name"), 'id -> ("name" + index))
@textarea(form("description"), 'id -> ("description" + index))
<input type="submit" value="Update"/>
}
}
</div>
}
关于你为什么你必须使用FQN在地图是因为它是可变的评论。默认情况下导入不可变变体。所以问题是为什么你会在这里使用可变的Map? – maba
@maba随着非限定性的Map我得到编译错误(“对象java.util.Map不是一个值”)。显然它认为我的意思是'java.util.Map',考虑到我在一个Scala源代码中,甚至没有导入它,这很奇怪。显然这张不可变换的地图也能起作用,但我仍然必须对其进行限定。 – Cubic