2016-11-25 13 views
8

मुझे लगता है कि मैं HtmlContent रों की एक परिवर्तनीय मात्रा में पास करना चाहते हैं play 2.6 में एक सामान्य टेम्पलेट है। मैं इस तरह template (अंतर्निहित पैरामीटर मैं मामले में है कि कुछ भी बदल जाता है सहित) में परिभाषित किया गया है:स्काला प्ले टेम्पलेट vararg HtmlContent

@(foo: String)(content: Html*)(implicit bar: Bar) 

टेम्पलेट तरफ, इस fine-- काम करता है मुझे लगता है मैं के रूप में for साथ content काटना और इसे प्रदान कर सकते हैं चाहते हैं। हालांकि, मैं अंतर्निहित टेम्पलेट से परिवर्तनीय तर्कों का आह्वान करने के लिए एक साफ तरीका समझने में सक्षम नहीं हूं।

@(something: String)(implicit bar: Bar) 

इसे में, मैं कई एचटीएमएल तर्क के साथ template आह्वान करने के लिए प्रयास करें:

उदा, मैं एक दृश्य "बाज" नाम दिया है। मैं निम्नलिखित की कोशिश की है:

@template("fooString"){{123},{abc}} 
and 
@template("fooString")({123}, {abc}) 
and 
@template("fooString"){{123}, {abc}}) 

और विभिन्न अन्य क्रमपरिवर्तन है, लेकिन एक संलग्न ब्रैकेट के अंदर यह सब कुछ सचमुच व्याख्या करने के लिए HtmlContent vararg में एक भी पैरामीटर के रूप में लगता है।

हालांकि, इस के रूप में मैं इरादा काम कर रहे कई HtmlContents में गुजर, समाप्त हो गया:,

@template("fooString")(Html("123"), Html("abc")) 

ताकि काम करता है और मैं एक बड़ी एचटीएमएल block-- के लिए एक ट्रिपल उद्धृत अंतर्वेशित स्ट्रिंग का उपयोग कर सकते हैं लेकिन ऐसा लगता है ऐसा करने के लिए एक क्लीनर तरीका होना चाहिए, और स्ट्रिंग इंटरपोलेशन खतरनाक है क्योंकि यह एचटीएमएल से बचने वाला नहीं है।

{ संलग्न वाक्यविन्यास का उपयोग कर ऐसा करने का कोई तरीका है? मैं समझना चाहता हूं कि वास्तव में अंतर्निहित स्तर पर क्या हो रहा है, और कैसे पार्स खेलते हैं और ब्रैकेट में HtmlContent उत्पन्न करते हैं।

+0

आपका 'एचटीएमएल (...) 'दृष्टिकोण मेरे लिए काफी साफ और स्पष्ट दिखता है। [ट्वर्लर स्रोत कोड] (https://github.com/playframework/twirl) हालांकि आपके प्रश्न में आगे बढ़ने और खोदने के लिए एक स्थान हो सकता है। – wwkudu

+0

मेरे द्वारा पोस्ट किए गए उत्तर पर कोई टिप्पणी? –

उत्तर

2

तो पर विचार आप टेम्पलेट नीचे है

// main.scala.html 
@(title: String)(contents: Html*) 

अलग-अलग तरीके आप इस टेम्पलेट कॉल कर सकते हैं कर रहे हैं

विकल्प # 1

यह वही है आप पहले से ही सवाल में पोस्ट किया जाता

@main("This is a title")(Html("abc"), Html("123")) 

विकल्प # 2

@html1 = { 
    Hello 
} 
@html2 = { 
    <div>Tarun</div> 
} 

@main("This is a title")(html1, html2) 

विकल्प # 3

@main("This is a title")(Html(<div>Tarun 
</div>.toString), Html(<div> 
Lalwani 
</div>.toString)) 

विकल्प # 4

यह बिल्कुल वैसा ही विकल्प नहीं है, लेकिन जरूरत है खाका हस्ताक्षर ही

में बदल
@(title: String)(contents: List[String]) 

और फिर जैसे विकल्प # 5

इस कोड फ़ाइलों की आवश्यकता है

नीचे
@main("This is a title")(List(
    """<div> 
    Tarun 
    </div> 
    """, """Hello""")) 

यह बुला और पहले से ही एक और पर जवाब था, इसलिए थ्रेड

Paul Draper's जवाब पर Why doesn't this pass multiple HTML parameters to template

+0

डाउनवोट के लिए कोई स्पष्टीकरण? डाउनवोट के साथ टिप्पणी करना सबसे अच्छा है –

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