2012-10-14 28 views
6

के साथ फ़ॉर्म कैसे प्रस्तुत करें मेरे पास मैपिंग की नेस्टेड सूची वाला एक फॉर्म है, लेकिन टेम्पलेट में इसे पुन: सक्रिय करने में समस्याएं हैं। फार्म लग रहा है इससूची मैपिंग

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

जैसे मैं टेम्पलेट में इस फार्म से गुजर रहा हूँ और गतिविधियों से अधिक पुनरावृति करने के लिए प्रयास करें। नतीजतन फ़ॉर्म के लिए अभी तक केवल कंपाइलर त्रुटियां या पूर्ण मेटाडाटा डंप।

यह गतिविधि के साथ, पूर्ण रूप का मेटाडेटा + डेटा डंप देता है। कार्यों के

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

पुनरावृत्ति प्रकार (कोड चलते) (LI टैग एक टैब नाविक कि इनपुट फ़ील्ड में शामिल होंगे है), लेकिन यह एक उपयोगकर्ता के दृष्टिकोण से पूरी तरह से बेकार है।

मैं भी के लिए-छोरों विभिन्न कोशिश की है, केवल मुझे त्रुटियों संकलक दे रही है,

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

मेरे सवालों का कह रहे हैं:

  1. यह इस तरह के एक फार्म के निर्माण के लिए संभव होना चाहिए है, और यह कैसे किया जाता है?
  2. एक से कई रिश्तों के साथ इनपुट फॉर्मों को प्रस्तुत करने के लिए मेरे पास अन्य विकल्प क्या हैं?
+0

उपयोग कर सकते हैं मैं इस सवाल का कल पोस्ट किया गया: // stackoverflow: http "। कॉम/क्यू/12883589/185840 "और एक ट्यूपल-आधारित समाधान के साथ आया जहां आप formA.zip (formB) फैशन में नेस्टेड रूपों के माध्यम से दोहरा सकते हैं - मदद कर सकते हैं ... लेकिन यह सुनिश्चित नहीं है कि आप यहां किस समस्या का सामना कर रहे हैं ऐसा लगता है कि फॉर्म का उत्पादन किया जा रहा है। आपको पता है कि आपको फॉर्मूल्ड बनाने के लिए @inputText (गतिविधि ("गतिविधि स्थिति"), '_label-> "गतिविधि स्थिति") जैसी कुछ करने की आवश्यकता है, है ना? – virtualeyes

+0

आपका समाधान उस पथ से नीचे जाने लगता है जहां मैं जा रहा हूं, और मैं इसे आजमाउंगा :)। मेरे प्रश्न में इनपुट फ़ील्ड के संबंध में: नेविगेशन टैब (ली तत्व) उत्पन्न करने वाले पुनरावृत्ति के बाद से मैंने असफलता के लिए इनपुट छोड़ दिया। – dagb

+0

मैंने पाया कि प्रतिपादन इनपुट-फ़ील्ड पूरी तरह से काम करता है। यह केवल ली तत्व उत्पन्न कर रहा है जो समस्याग्रस्त है। ऐसे उद्देश्यों के लिए किसी फॉर्म फ़ील्ड का मूल्य कैसे उपयोग किया जा सकता है? – dagb

उत्तर

1

समाधान इस के रूप में सरल navtab.scala.html है,

@** 
* Generate an LI element 
*@ 

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

फिर अपने टेम्पलेट

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

आप indexes विधि का उपयोग कर सकते हैं सूची प्रस्तुत करने के लिए में मैप संग्रह के लिए दोहराएँ (सीईसी, सरणी) मान।

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

लेकिन इस unuseful है, तो मैं अंतर्निहित विधि

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

इस वर्ग, बनाया आयात के बाद आप @assignmentForm("activities").values

संबंधित मुद्दे