4

我有一个如下所示的播放模板:

@(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是一个包含 along id和 aString name和的模型description

我的问题是这里

@inputText(form("name"), 'value -> project.name)
@textarea(form("description"))

inputText 和 textarea 总是分别获得 idnamedescription。我有很多这样的,所以这些 id 不再是唯一的。这仍然适用于 chrome,但我知道 id 在文档中必须是唯一的。Play 中是否有一些内置的方法来处理这类问题,还是我必须想出一个自己的解决方案?如果是后者,您对如何解决这个问题有什么建议吗?还是我做错了什么?

4

1 回答 1

4

您可以使用项目的列表索引并将其附加到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>
}
于 2013-05-30T10:22:38.527 回答