Play 2 と Scala で注文フォームを作ろうとしています。
グループ分け前はこんな感じ。
<table>
@items.zipWithIndex.map {
case (item, index) =>
@itemRow(item, index)
}
</table>
itemRow の定義
@itemRow(index: Int, item: Item) = {
<tr>
<td>
@(index+1)
</td>
<td>
@item.name
</td>
<td>
<input type="hidden" name="@requestForm("items")("[" + index + "]")("itemId").name" value="@item.id">
<input type="text" name="items[@index].count" value="@requestForm("items")("[" + index + "]")("count").value">
</td>
</tr>
}
最初は単純な実装を試みました
@items.groupBy(item => item.category).map {
case (categoryId, itemsInCategory) =>
<table>
@itemsInCategory.zipWithIndex.map {
case (item, index) =>
@itemRow(item, index)
}
</table>
}
しかし問題があり、各カテゴリのインデックスは 0 から始まります。
したがって、http リクエストは次のようなものです。
# category 1
items[0].id = 1
items[0].count = 1
items[1].id = 2
items[1].count = 2
# category 2
items[0].id = 3
items[0].count = 1
items[1].id = 4
items[1].count = 5
そして、それは値が上書きされる原因です。次のように、フォーム内で連続するインデックスが必要です。
# category 1
items[0].id = 1
items[0].count = 1
items[1].id = 2
items[1].count = 2
# category 2
items[2].id = 3
items[2].count = 1
items[3].id = 4
items[3].count = 5
そこで質問があります
関数型プログラマの場合:
- すべてのグループで共有されるインデックス変数を作成できますか?
Play 2.0 または Web プログラマーの場合:
- 繰り返し値の可変カウントでフォームを作成する別の方法はありますか?
- この大量のアイテムを 0 カウントで送信しないようにするにはどうすればよいですか?