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メソッドとunapllyメソッドを使用できます。そうでない場合は、カスタム関数を使用する必要があります。

((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 に答える