2013-11-23 14 views
6

मेरे मार्ग हैं। दूसरा टिप्पणी है।प्ले फ्रेमवर्क। मार्गों। त्रुटि: "विधि के लिए पर्याप्त तर्क नहीं ..."

GET   /assets/*file  controllers.Assets.at(path="/public", file) 

#GET   /partials/*file controllers.Assets.at(path="/public/partials", file) 

(क्या मैं चाहता हूँ है: मेरी html फ़ाइलें कि "/public/partials" फ़ोल्डर के अंदर स्थित हैं, उसी तरह के रूप में यह assets के लिए बनाए गए वेब के माध्यम से उपलब्ध होने की बनाने के लिए)

जैसे ही मैं के रूप में टिप्पणी हटाएं 2 लाइन - यह इस लाइन (मेरी index.scala.html से) के कारण त्रुटियों मिल जाएगा:

<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")"> 

त्रुटि यहाँ की तरह है:

not enough arguments for method at: (path: String, file: String)play.api.mvc.Call. Unspecified value parameter file.

प्रश्न: क्या गलत है?

अद्यतन:

एक और शब्द: मुझे लगता है कि मानचित्रण प्रदान करके मेरी यूआरएल कम करने के लिए चाहते हैं। अन्यथा मुझे इस यूआरएल का उपयोग करना होगा: 'assets/partials/welcome.html' उस के बजाय (जिसे मैं उपयोग करना चाहता हूं): 'partials/welcome.html'

बस एक और मैपिंग जो मेरे यूआरएल को कम कर देगा।

यह समझ में आता है कि मुझे जेएस भाग से उन तक पहुंचने की ज़रूरत है, यह एक में दो अनुप्रयोगों (1. एक प्ले, 2. जेएस वन) की तरह है, वहां भी रूटिंग, दो जड़ें हैं। जेएस के लिए मैं मान रहा हूं कि मैं पहले से ही/सार्वजनिक (या संपत्तियों में) हूं - यह जेएस ऐप के लिए जड़ है।

और मुझे आश्चर्य है कि यह क्यों काम नहीं करता है।

उत्तर

10
play docs से

:

सार्वजनिक संपत्ति

मार्गों फ़ाइल में मैप किसी भी नियंत्रक के रूप में के लिए रिवर्स मार्ग, एक रिवर्स नियंत्रक controllers.routes.Assets में बनाया जाता है। सार्वजनिक संसाधन लाने के लिए आवश्यक यूआरएल को उल्टा करने के लिए आप इसका इस्तेमाल करते हैं। उदाहरण के लिए, एक टेम्पलेट से:

<script src="/assets/javascripts/jquery.js"></script> 

नोट जब हम मार्ग रिवर्स है कि हम पहले folder पैरामीटर निर्दिष्ट नहीं है:

<script src="@routes.Assets.at("javascripts/jquery.js")"></script> 

यह निम्न परिणाम का उत्पादन करेगा। ऐसा इसलिए है क्योंकि हमारी मार्ग फ़ाइल Assets.at कार्रवाई के लिए एक मैपिंग को परिभाषित करती है, जहां फ़ोल्डर पैरामीटर तय किया जाता है। तो इसे स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता नहीं है।

हालांकि, यदि आप संपत्ति के लिए दो मैपिंग परिभाषित करते हैं।

GET /javascripts/*file  controllers.Assets.at(path="/public/javascripts", file) 
GET /images/*file    controllers.Assets.at(path="/public/images", file) 

तो फिर तुम जब रिवर्स राउटर का उपयोग कर दोनों पैरामीटर निर्दिष्ट करने की आवश्यकता होगी:

<script src="@routes.Assets.at("/public/javascripts", "jquery.js")"></script> 
<image src="@routes.Assets.at("/public/images", "logo.png")"> 

सार्वजनिक/partials निर्देशिका में किसी भी स्थिर HTML पर सार्वजनिक रूप से उपलब्ध होगा/संपत्ति कार्रवाई में, इस तरह /partials/someHtml.html। तो कड़ाई से बोलते हुए, आपको/partials/* फ़ाइल रूट

+0

की आवश्यकता नहीं है, लेकिन मुझे पता है कि मैपिंग प्रदान करके मैं अपना यूआरएल छोटा बनाना चाहता हूं। अन्यथा मुझे इस यूआरएल का उपयोग करना होगा: 'संपत्ति/आंशिक/स्वागत.html' इसके बजाय: 'partials/welcome.html'। बस एक और मैपिंग जो मेरे यूआरएल को कम कर देगा। जब मुझे जेएस भाग से उन तक पहुंचने की ज़रूरत होती है, तो यह समझ में आता है, यह एक में दो अनुप्रयोगों की तरह है (1. एक खेलें, 2. जेएस एक), वहां भी रूटिंग, दो जड़ें हैं। जेएस के लिए मैं मान रहा हूं कि मैं पहले से ही/सार्वजनिक (या संपत्तियों में) हूं - यह जेएस ऐप के लिए जड़ है। और मैंने सोचा कि यह क्यों काम नहीं करता है। – ses

+1

शायद यह आपके लिए पहले से ही स्पष्ट है लेकिन यदि आप Assets.at कार्रवाई के लिए दूसरी मैपिंग को परिभाषित करते हैं तो आपको रिवर्स राउटर का उपयोग करते समय पथ पैरामीटर निर्दिष्ट करना होगा। ऐसा इसलिए है क्योंकि पथ अब संदिग्ध है। तो @ routes.Assets.at ("स्टाइलशीट्स/main.css") का उपयोग करने में सक्षम होने के बजाय आपको @ routes.Assets.at ("/ public", "स्टाइलशीट्स/main.css") – mantithetical

+0

हाँ का उपयोग करना होगा। समझा। मैं बेहतर रूप से एक मार्ग परिभाषा का उपयोग करता हूं और यूआरएल में एक और शब्द रखने से 'पीड़ित' होगा, जो प्रत्येक संपत्ति-यूआरएल के लिए एक और अधिक सर्वोपरि रखेगा। – ses

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