0

我们如何使用 scala 在 play2.0 中创建复选框并将它们与我们的表单绑定。

如果我有

    val placeForm = Form(
    mapping(
        "id" -> ignored(NotAssigned: Pk[Long]),
        "url_key" -> nonEmptyText,
        "title" -> optional(text),
        "page_id" -> optional(longNumber)
    )(models.Place.apply)(models.Place.unapply)
)

我创造了这样的形式。

    @form(routes.Page.save) {

    @form(routes.Page.save) {

    <fieldset>

    @inputText(pageForm("title"), '_label -> "Title")
    @inputText(pageForm("template"), '_label -> "Template") <label>Options:</label>
    <div class="input">
        <label>note <input type="checkbox" name="options[]" value="0">
        </label> <label>About US <input type="checkbox" name="options[]"
        value="0">
        </label> <label>Facebook <input type="checkbox" name="options[]"
        value="0">
        </label> <label>Twitter <input type="checkbox" name="options[]"
        value="0">
        </label> <label>Hotmail <input type="checkbox" name="options[]"
        value="0">
        </label> <label>Something <input type="checkbox" name="options[]"
        value="0">
        </label>
    </div>


    </fieldset>

现在我不想要简单的 html 来创建这些复选框并将这些复选框值绑定到表单
中 任何人都可以帮我解决这个问题

4

1 回答 1

1

您的结构val placeForm必须与您在模板中呈现的表单相匹配。

例如 :

val placeForm = Form(
    mapping(
        "id" -> ignored(NotAssigned: Pk[Long]),
        "title" -> optional(text),
        "template" -> optional(text),
        "checkbox1" -> text
        "checkbox2" -> text
    ) // ... here construction and deconstruction functions
)

您的模板可能如下所示:

@form(routes.Page.save) {

    <fieldset>

    @inputText(pageForm("title"), '_label -> "Title")
    @inputText(pageForm("template"), '_label -> "Template") 

<label>Options:</label>

<div class="input">
        <label> 1 <input type="checkbox" name="checkbox1" value="1"> </label>
        <label> 2 <input type="checkbox" name="checkbox2" value="2"> </label>
    </div>

    </fieldset>
}

现在重要的是要了解这些复选框的用途。如果您想将那里的值绑定到您的值case class Place并且您的表单结构完全匹配您的案例类,您可以使用 apply 和 unapply 方法,如果没有...您必须使用您的自定义函数...

((title, template, checkbox1, checkbox2)=> Place(title, template, checkbox1, checkbox2))  //construct function

((place : Place) => Some((place.title, place.template, place.property_that_correspond_to_checkbox1_value,place.property_that_correspond_to_checkbox2_value)) // deconstruct function

或者您可以使用tuple而不是mapping用于表单构造,然后将您的值简单地作为元组值

于 2013-02-03T17:08:12.797 回答