2013-04-23 6 views
8

में एक स्केला फ़ंक्शन निर्धारित मैं एक नाटक देखने टेम्पलेटएक नाटक टेम्पलेट

@active(path: String):String = @{ 
     var active:String = "" 
     if (request.path.startsWith(path)) { 
      active = "class=\"active\"" 
     } 
     return active 
} 

<div class="container-fluid"> 
.... 
    <li @active("/page") ...> 

खेलने संकलक में एक समारोह का उपयोग करने की कोशिश का कहना है कि यह मूल्य सक्रिय नहीं मिल सकता है। यहाँ क्या गलत है?

+1

एक के लिए, दूसरा @ प्रतीक अनावश्यक है। दूसरा, क्या आपने अपनी सक्रिय फ़ाइल में @ सक्रिय फ़ंक्शन को परिभाषित किया है और/या इसे आयात किया है? – korefn

+0

मैंने इसे अपनी फाइल में अभी स्थानांतरित कर दिया। इस तरह यह काम करता है। यह भी ठीक है क्योंकि मुझे इसे अन्य फाइलों में भी चाहिए। – myborobudur

+2

@korefn: दरअसल, दूसरा @ प्रतीक बताता है कि एचटीएमएल टेम्पलेट के एक खंड के विपरीत, प्ले दस्तावेज "शुद्ध" (यानी स्कैला) कोड कहता है, यह एक ब्लॉक है। अगर वह उस @ को छोड़ देता है, तो फ़ंक्शन "var सक्रिय: स्ट्रिंग ... आदि" लौटाएगा शाब्दिक पाठ के रूप में। –

उत्तर

15

फ़ंक्शन के रिटर्न प्रकार को हटाने का प्रयास करें और इसे अपने टेम्पलेट के शीर्ष पर ले जाएं। यह मेरे टेम्पलेट में काम करता है (यह भी देखें: Playframework 2.0 define function in View Template):

@active(path: String) = @{ 
    if (request.path.startsWith(path)) 
    "class=\"active\"" 
    else 
    "" 
} 
संबंधित मुद्दे