拉链风格@Repeat在嵌套表格(zip style @repeat over nested for

2019-08-01 11:08发布

@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,破解到位的东西,直到框架支持似乎是一个限制)

Answer 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 ;-)



文章来源: zip style @repeat over nested form