Friday 15 May 2015

scala - Play forms: how to fill a repeated field? -


मेरे पास दोहराए गए क्षेत्र के साथ एक रूप है:

 (Myform.apply _) (MyForm.unapply _))  form class {MyForm} = form (मानचित्रण ("विषय" -> (संख्या)) (MyForm.apply _))   

और इसी दृश्य:

  @form (...) {& lt; h2 & gt; विषय ब्याज: & lt; / h2 & gt; @ के लिए (विषय (आईडी, नाम, _) & lt; - विषय.सभी) {@ चेकबॉक्स (बिडफॉर्म ("विषय [$ id]"), '_label - & gt; (नाम + ":")। मान - & gt; id.toString)} & lt; इनपुट प्रकार = "सबमिट करें" id = "सबमिट करें" मान = "सहेजें" & gt; }   

अब तक इतना अच्छा है, अगर फ़ील्ड में कोई त्रुटि है और मैं इसे myForm.bindFromRequest पास कर रहा हूं।

मैं अपने डेटाबेस से डेटा के साथ फॉर्म को भरना चाहता हूं। अन्य प्रकार के फ़ील्ड ( संख्या , टेक्स्ट , विकल्प () और इसी तरह) के साथ मैं एक existing MyForm ऐसा कुछ के साथ:

  val मौजूदा MyForm = myForm.fill (MyForm (// क्वेरीज़ डेटाबेस और क्षेत्र के साथ केस वर्गों की एक सूची वापस आईडी: इंट टॉपिक्स। (सदस्य) .मैप (_। आईडी)))   

हालांकि list के साथ यह दृष्टिकोण विफल रहता है और मुझे मैपिंग मैन्युअल रूप से करना होगा :

  val मौजूदा MyForm = myForm.bind (विषय। का (सदस्य) .map (t = & gt; ("विषय [% s]"।   

ऐसा करने का एक बेहतर तरीका है?

मेरा मानना ​​है कि आपको स्पष्ट रूप से MyForm कन्स्ट्रक्टर को सूची [इंट] पास करने की आवश्यकता है, अर्थात

  val currentMyForm = myForm.fill (MyForm (विषय। (सदस्य) .मैप (_। Id) .tolist))   

संपादित करें - यह मेरा मूल कार्यान्वयन है आयन जो 2.1.1 स्केला प्ले करने के लिए काम करता है:

  मामला वर्ग MyForm (विषय: सूची [इंट]) केस वर्ग विषय (आईडी: इन्ट) वैल myForm: फॉर्म [मायफ़ॉर्म] = फॉर्म (मैपिंग ("विषय" - & gt; सूची (संख्या)) (MyForm.apply _) (MyForm.unapply _)) मूल्य विषय सूची: सूची [विषय] = सूची (विषय (1), विषय (2), विषय (3)) def test = कार्रवाई {निहित अनुरोध = & gt; वैल मौजूदा माइफ़ॉर्म = myForm.fill (MyForm (topicList.map (_। आईडी)) ठीक है (views.html.test (मौजूदा MyForm))}    

No comments:

Post a Comment