4

@repeat非常に便利です。しかし、私はネストされたフォームで障害にぶつかっています。

ゲームのスケジュールのフォームを作成する必要があります。このフォームには、スケジュールデータ(ゲームの日付、時刻、場所、対戦相手)とチームノートの送信(たとえば、「冬の嵐のため、1月7日のゲームはに移動されました」)の2つの属性があります。 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に対して構築しているので、フレームワークが制限と思われるものをサポートするまで、適切な場所で何かをハックします)

4

1 に答える 1

4

編集
実際、私の最初の試みは、生成されたフィールドの数を2倍にしました。これは正しい数のフィールドを生成します:

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+"]")) )
    }
  }
}

フォームマップのフォームデータ値を適切に編集する場合は、まだ未定です。

オリジナル
の実験、これはコンパイルします:

// 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")
}

必要に応じて、ゲームデータとメモを一緒に生成します。

フォーム編集で動作するかどうかについては、未定;-)

于 2012-10-14T17:05:41.597 に答える