2011-10-27 69 views

उत्तर

21

प्ले 2.0 में टेम्पलेट इंजन सीधे प्ले 1.0 स्कैला मॉड्यूल से आ रहा है। यदि आप अभी भी सोच रहे हैं कि स्काला जैसी कार्यात्मक भाषा किस तस्वीर को लाती है, तो यह निश्चित रूप से उन क्षेत्रों में से एक है जहां यह चमकता है।

प्रदर्शन:

स्केला वाक्य रचना में एक टैग एक समारोह कॉल की तुलना में और कुछ नहीं है। दिलचस्प क्या है, यह है कि एचटीएमएल टुकड़े खुद को कार्यों के रूप में माना जाता है, जिससे सबसे शक्तिशाली प्रतिस्थापन होता है।

के mytag.scala.html नामक एक html पृष्ठ को परिभाषित करते हैं

फ़ाइल: क्षुधा/विचारों/mytags/mytag.scala.html

@(level:String = "error", index: Int)(body: (String) => Html) 

@level match { 

    case "success" => { 
     <p class="success" index="@index"> 
      @body("green") 
     </p> 
    } 

    case "warning" => { 
     <p class="warning" index="@index"> 
      @body("orange") 
     </p> 
    } 

    case "error" => { 
     <p class="error" index="@index"> 
      @body("red") 
     </p> 
    }  
} 

टैग के ऊपर 2 अलग में 3 पैरामीटर लेता है पैरामीटर समूहों:

  1. एक स्तर, एक स्ट्रिंग के प्रतिनिधित्व वाले (जो चूक "त्रुटि" के लिए)
  2. एक सूचकांक
  3. अंततः शरीर नामक एक फ़ंक्शन, जो स्ट्रिंग पैरामीटर लेता है और HTML कोड देता है। ध्यान दें कि शरीर को अपने पैरामीटर समूह में परिभाषित किया गया है। यह j2ee में जेएसपी खंड के रूप में हम जो जानते हैं उसके बराबर है।

अब हम कैसे इस टैग का उपयोग कर सकते हैं देखते हैं: इससे पहले कि हम एक टैग (या समारोह) का उपयोग कर सकते

@import views.mytags._ 

@mytag("error",2) { color => 
    Oops, something is <span style="color:@color">wrong</span> 
} 

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

कॉल को स्वयं ही फॉलो करता है जो कि सरल है। ध्यान दें कि हम टैग पर एक parametrized एचटीएमएल खंड पारित कर रहे हैं।

अधिक जानकारी के लिए, तो आप इस URL

पर स्केला टेम्पलेट प्रलेखन प्ले 2.0 अंत में अपने स्वयं के प्रलेखन के साथ आ जाएगा मिल सकता है।

4

पूरी तरह से अनावश्यक उत्तर लेकिन बस मेरे स्केल को प्रशिक्षित करने के लिए। यह काम नहीं करेगा और स्पष्ट रहने के दौरान कम होगा?

@(level:String = "error", index: Int)(body: (String) => Html) 

<p class="@level" index="@index"> 
    @body(
     @level match { 
     case "success" => "green" 
     case "warning" => "orange" 
     case "error" => "red" 
     } 
    ) 
</p> 
+0

मैं ईमानदारी से नहीं जानता, अभी तक एक स्कैला विशेषज्ञ नहीं है। एसओ पर एक अच्छा सवाल लग रहा है। –

+0

मुझे जल्द ही play2.0 पुनः प्रयास करना चाहिए। पिछली बार, यह वास्तव में मेरे प्रयोगों के लिए वास्तव में बहुत कच्चा था! मैं अभी तक एक स्कैला विशेषज्ञ नहीं हूं लेकिन मैं बहुत कुछ सीखता हूं और अब तक यह एकमात्र भाषा है जो मुझे इंप्रेशन देती है कि मैं अंत में जावा को निश्चित रूप से बंद कर सकता हूं;) – mandubian

+0

इस मामले में, यदि स्तर सफलता, चेतावनी के अलावा कुछ भी है या त्रुटि, आपके पास उस सीएसएस वर्ग के साथ एपी टैग होगा, जिसे इंडेक्स नहीं किया जा सकता है। @ ओलिवियर रिफेलो के उत्तर में, एक पी टैग केवल मुद्रित किया जाएगा यदि यह त्रुटि स्तरों में से किसी एक से मेल खाता है। – user3001

0

मुझे पहले उदाहरण का उपयोग करने पर एक कंपाइलर त्रुटि मिलती है। "विचार" हटाएं। आयात में समस्या

@import mytags का उपयोग करें।_

पूर्ण उदाहरण (http://www.playframework.com/documentation/2.1.1/JavaTemplateUseCases):

Let’s write a simple views/tags/notice.scala.html 
tag that displays an HTML notice: 

@(level: String = "error")(body: (String) => Html) 

@level match { 

    case "success" => { 
    <p class="success"> 
     @body("green") 
    </p> 
    } 

    case "warning" => { 
    <p class="warning"> 
     @body("orange") 
    </p> 
    } 

    case "error" => { 
    <p class="error"> 
     @body("red") 
    </p> 
    } 

} 

और अब यह एक और टेम्पलेट से का उपयोग करते हैं:

@import tags._
@notice ("त्रुटि") {रंग => ओह, कुछ गलत है}

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