2013-12-12 12 views
6

में विकल्पों के साथ काम करना मैं अपने स्कैला प्ले टेम्पलेट में टाइप विकल्प के संदर्भ की कोशिश कर रहा हूं। http://www.playframework.com/modules/scala-0.9/templatesस्कैला प्ले टेम्पलेट

यह कैसे मैं मामले कक्षा में एक क्षेत्र को संदर्भित कर रहा हूँ: मैं इस संसाधन का उपयोग करने की कोशिश कर रहा है

@{optionalobject ?. field} 

और यह काम नहीं कर रहा है, इस त्रुटि मैं हो रही है :

';' expected but '.' found. 

मुझे यकीन नहीं है कि मुझे यह त्रुटि क्यों मिल रही है।

उत्तर

5
@optionalobject.map(o => o.field).getOrElse("default string if optionalobject is None") 
0

आपके टैग्स के आधार पर आप Play 2.x संस्करण का उपयोग कर रहे हैं, लेकिन आप प्ले 1.x के लिए एक मॉड्यूल से दस्तावेज़ीकरण का संदर्भ दे रहे हैं।

अपने प्रकार के मैच मान लिया जाये कि, मेरा मानना ​​है कि आप क्या देख रहे है कुछ की तरह:

@optionalobject.getOrElse(field) 
+0

यह काम नहीं कर रहा है। यह कह रहा है कि क्षेत्र मौजूद नहीं है। हालांकि, यह अस्तित्व में होना चाहिए। जब केस क्लास आउटपुट होता है तो यह केस क्लास के सभी फ़ील्ड दिखाता है। –

+0

@ Lilluda5 अपना प्रश्न संपादित करें और अपना कोड अधिक दिखाएं। आप 'वैकल्पिकobject' और' फ़ील्ड' कैसे घोषित कर रहे हैं? – estmatic

21

थोड़ा अच्छे स्वरूपण कि कई लाइनों अवधि (यदि आप की जरूरत है) के लिए:

@optionalObject match { 
    case Some(o) => { 
    @o.field 
    } 
    case None => { 
    No field text/html/whatever 
    } 
} 

या यदि फ़ील्ड परिभाषित नहीं किया गया है तो आप कुछ भी प्रदर्शित नहीं करना चाहते हैं:

@for(o <- optionalObject) { 
    @o.field 
} 
+1

_display के लिए वह दूसरा कोड स्निपेट यदि फ़ील्ड परिभाषित नहीं है तो केस का उपयोग प्यारा है। मैं इस तथ्य पर चमक रहा हूं कि 'विकल्प' एक संग्रह प्रकार है, जिससे आप इस तरह की चीजें कर सकते हैं। – avik

0

एक और संभावना नक्शा उपयोग कर रहा है, वाक्य रचना मैं HTML

@pagination.next.map { next => 
    <a href="@Routes.paginated(next)"> 
    @HtmlFormat.escape("Next >>>") 
    </a> 
} 
0

कभी कभी के साथ मिश्रण के लिए पसंद करते हैं यह जब Option के साथ काम कर टेम्पलेट कोड declutter के लिए एक छोटी सहायक लिखने के लिए सुविधाजनक हो सकता है:

// Helper object is defined in some file Helper.scala 
    object Helper { 
    def maybeAttribute[T](attrName:String, maybeValue:Option[String]) = 
     maybeValue.fold("") { value => 
     Html(attrName + "=" + value).toString() 
     } 
    } 

फिर टेम्पलेट इस सहायक विधि का उपयोग सीधे

// some view.scala.html file 
    <div @Helper.maybeAttribute("id",maybeId)> 
    </div> 
संबंधित मुद्दे