2012-10-14 29 views
6

İç içe geçmiş eşleme listesi olan bir Formum var, ancak bunu şablonda yinelemede sorun yaşıyorum. Ben şablonuna Bu formu geçirerek ve faaliyetleri üzerinde yineleme deneyin olduğum buListe eşlemeli bir form nasıl oluşturulur

val assignmentForm : Form[AssignmentData] = Form(
    "acceptedSign" -> nonEmptyText(), 
    mapping("activities" -> list ( 
     mapping("activityId" -> optional(text), 
      "activityStatus" -> optional(text)) 
      (ActivityData.apply)(ActivityData.unapply)) 
    )(AssignmentData.apply)(AssignmentData.unapply) 
) 

gibi Formu görünüyor. Şimdiye kadar sadece derleyici hataları veya formun tam bir meta veri dökümü.

Bu, etkinlik dahil olmak üzere, tüm formun bir meta veri + veri dökümü sağlar. eser

@repeat(assignmentForm("activities")) { activity => 
        <li>@activity("activityId")</li> 
        } 

Yineleme sort (kod çalışır gibi) (LI etiket giriş alanlarını içerecek bir sekme yönlendirmek olduğunu), ama bir kullanıcı açısından tamamen kullanılamaz.

  1. böyle bir form oluşturmak mümkündür mı olmalı, ve:

    value map is not a member of play.api.data.Field 
    

    Benim soruları söyleyerek ben de sadece bana hataları derlemek vererek for-döngüler çeşitli denedim

    vardır Nasıl oldu?

  2. Girdi formlarını bire-çok ilişki gemileriyle oluşturmak için başka hangi seçeneklerim var?
+0

kullanabilirsiniz ithalat sonra bu sınıfı, örtülü yöntemi

import play.api.data.Field object FieldExtend { implicit class FieldExtend(field: Field) { def values: Seq[Option[String]] = { field.indexes.map(i => field(s"[$i]").value) } def containsValue(value: Byte): Boolean = { values.contains(Some(value.toString)) } } } 

yarattı. com/q/12883589/185840 "ve formA.zip (formB) modayı içinde yuvalanmış formları kullanarak @repeat yapabileceğiniz bir tuple tabanlı çözüm ile gelebilir ... ama burada karşılaştığınız problemden emin değilsiniz. biçim üretiliyor gibi geliyor. Bir form alanı oluşturmak için @inputText (etkinlik ("activityStatus"), "_label->" Etkinlik Durumu ") gibi bir şey yapmanız gerektiğini biliyorsunuz, değil mi? – virtualeyes

+0

Çözümünüz, gideceğim yoldan aşağı gidiyor gibi görünüyor ve ben de deneyeceğim :). Sorgumdaki girdi alanları ile ilgili olarak: Gezinme sekmeleri oluşturmaları gereken yineleme (li öğeler) başarısız olduğundan, kısaltmalar için girdilerden çıktım. – dagb

+0

Giriş alanları oluşturmanın mükemmel bir şekilde çalıştığını keşfettim. Sadece sorunlu olan li unsurları üretiyor. Bir form alanının değeri, böyle amaçlar için nasıl kullanılabilir? – dagb

cevap

1

çözüm navtab.scala.html bu kadar basittir

@** 
* Generate an LI element 
*@ 

@(field: play.api.data.Field) 
<li><a href='#@field.id' data-toggle="modal">@field("activityStatus").value</a></li> 

Sonra Listeyi oluşturmak için indexes yöntemi kullanabilirsiniz

<ul id="activities"> 
    @repeat(assignmentForm("activities"), min=0) { activity => 
     @navtab(activity) 
    } 
</ul> 
0

Şablonunuzdaki eşlenen koleksiyonu için tekrarlayın (sıra, dizi) değerleri. "Http: // stackoverflow

@assignmentForm("activities").indexes.map(i => 
    assignmentForm("activities").indexes(s"[$i]").value 
) 

Ama bu unuseful olduğunu, bu yüzden dün bu soruyu yayınlanmıştır @assignmentForm("activities").values

İlgili konular