@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)=>
在嵌套的形式的元素。
反正我能拉这一关? 展望从源头上似乎没有,但或许还有一个皮条客我的图书馆有可能(或者,因为我对建设2.1,破解到位的东西,直到框架支持似乎是一个限制)
编辑
其实,我原来的一倍企图产生的场数; 这其中产生的字段的正确数量:
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如果编辑表单映射形成正确的数据值....
原版的
实验,这个编译:
// 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 ;-)