@repeat
非常有用;但是,我正在尝试使用嵌套表格的路障。
我需要制作一个游戏时间表表格,其中包含2个属性,时间表数据(游戏日期,时间,位置,对手)和提交团队记录(例如“由于冬季风暴1月7日的比赛已经被移至1月9日......夏威夷;-)“)
表单映射基于:
case class Schedule(
composite: Seq[Composite],
note: Seq[ScheduleNote]
)
然后在我拥有的模板中显示表单:
@repeat(_form("composite"), min=numGames) { f=>
@inputDate(f("gameDate"), 'id-> "gameDate", '_label-> "Game Date")
....
}
@repeat(_form("note"), min=numGames) { f=>
@inputDate(f("gameNote"), '_label-> "Game Notes")
....
}
当然游戏笔记需要与游戏数据配对,这在上面不会发生,因为看起来我需要@repeat
分别合成游戏数据和笔记。
真的,真的很好:
@repeat(_form("composite").zip(_form("note")), min=numGames) { case(fc,fn)=>
覆盖嵌套表单元素。
无论如何我可以把它拉掉吗?看起来at the source它似乎没有,但也许是皮条客我的图书馆是可能的(或者,因为我正在构建2.1,在框架支持似乎是一个限制之前修改了一些东西)
答案 0 :(得分:4)
修改强>
实际上,我原来的尝试使产生的字段数量增加了一倍;这个生成正确数量的字段:
object repeat2 {
import play.api.data.Field, play.api.templates.Html
def apply(field: (Field,Field), min: Int = 1)(f: (Field,Field) => Html) = {
field match{ case(a,b)=>
(0 until math.max(
if (a.indexes.isEmpty) 0 else a.indexes.max + 1, min)
).map(i => f.apply(a("["+i+"]"), b("["+i+"]")) )
}
}
}
如果编辑表单映射正确形成数据值,那么仍然是TBD ....
<强> ORIGINAL 强>
试验,这编译:
// in a form utility object
object repeat2 {
import play.api.data.Field, play.api.templates.Html
def apply(field: (Field,Field), min: Int = 1)(f: Field => Html) = {
field match{ case(a,b)=>
(0 until math.max(
if (a.indexes.isEmpty) 0 else a.indexes.max + 1, min)
).map(i => f(a("["+i+"]")) + f(b("["+i+"]")) )
}
}
}
// then, importing above in a template
@repeat2( (_form("composite"), _form("note")), min=5) { f=>
@inputDate(f("gameDate"), 'id-> "gameDate", '_label-> "Game Date")
...
@inputDate(f("gameNote"), '_label-> "Game Notes")
}
并根据需要一起生成游戏数据和笔记。
关于它是否适用于表格编辑,TBD; - )