2012-03-06 10 views
7

मैं एमवीसी के लिए काफी नया हूं और मैं cshtml फ़ाइलों और उनके संबंधित जावास्क्रिप्ट कोड को स्टोर करने का सबसे अच्छा तरीका तय नहीं कर सकता। मेरे प्रोजेक्ट में कुछ जेएस कोड को वैश्विक स्तर पर चलाने की जरूरत है, लेकिन इनमें से अधिकांश पूरी तरह से विशिष्ट विचारों या आंशिक विचारों से बंधे हैं।एमवीसी - क्या उनके संबंधित जावास्क्रिप्ट के साथ नियंत्रण बंडल करने का कोई अच्छा तरीका है?

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

मैंने सुना है कि एमवीसी 4 में मिनीफिकेशन फीचर्स होने जा रहे हैं, क्या मैं एमवीसी 3 के साथ कुछ कर सकता हूं जो मुझे उन दृश्यों में से चुनने की अनुमति देगा जो जावास्क्रिप्ट को शामिल करने के लिए और फिर उन्हें समूहित करें और उन्हें स्वचालित रूप से छोटा करें? (शायद समूहों में भी?)

+1

दोनों है है हो सकता है, कोड है कि एक वैश्विक फ़ाइल और कोड में पुन: उपयोग कर रहा है दृश्य दृश्य में विशिष्ट है। –

+0

मेरी चिंताओं में से एक में कई अलग-अलग फाइलों में कई http कॉल हैं, इसलिए यदि मैं एक अलग फ़ाइल में नियंत्रण विशिष्ट कोड डालता हूं, तो मैं कई अनुरोधों के साथ समाप्त होता हूं – Madd0g

उत्तर

6

Cassette यह अनिवार्य रूप से आगामी एमवीसी 4 बंडलों जैसा ही है।

अपने दृश्य पृष्ठ में, आप कैसेट के Bundles सहायक वर्ग का उपयोग कर स्क्रिप्ट और स्टाइलशीट का संदर्भ दे सकते हैं।

@{ 
    Bundles.Reference("Scripts/jquery.js"); 
    Bundles.Reference("Scripts/page.js"); 
    Bundles.Reference("Styles/page.css"); 
} 
<!DOCTYPE html> 
    <html> 
... 

इसके अलावा, कैसेट Less और CoffeScript के लिए देशी समर्थन है। यदि आप क्लाइंट साइड एमवीसी फ्रेमवर्क जैसे Knockout.js या Backbone.js में रुचि रखते हैं, तो यह HTML टेम्पलेट्स के लिए भी समर्थन करता है।

फिर भी आपको अपनी सामग्री को समूहबद्ध करना चुनना होगा। official documentation सुझाव दे रहा है, शायद सबसे अच्छा विकल्प बंडलों को तैनाती की इकाइयों के रूप में पेश करना है।

ध्यान रखें कि एक बंडल पर तैनाती की इकाई है। यदि बंडल में कोई भी संपत्ति बदलती है, तो पूरे बंडल को वेब ब्राउज़र द्वारा फिर से डाउनलोड करना होगा। तो शायद समूह ने एक बंडल में कोड साझा किया और पेज स्क्रिप्ट को अपने स्वयं के बंडलों में में डाल दिया।
1

आप प्रत्येक दृश्य के लिए जावास्क्रिप्ट को अलग-अलग फ़ाइलों में डाल सकते हैं। तब _Layout.cshtml में सिर के लिए एक @RenderSection दर्ज करें:

@section head{ 
    <script src="@Url.Content("~/ViewScripts/Order/New.js")" type="text/javascript"></script> 
} 
+0

हाँ, मुझे अनुभागों के बारे में पता है, लेकिन क्या होगा यदि दो आंशिकों की आवश्यकता हो एक ही जावास्क्रिप्ट? मैं एक ही फ़ाइल में एकाधिक कॉल नहीं चाहता हूं, मुझे पता है कि व्यावहारिक रूप से ब्राउज़र उन्हें दो बार नहीं बुलाएंगे, लेकिन वे अभी भी एचटीएमएल – Madd0g

+0

में होंगे मेरा समाधान केवल "विशिष्ट दृश्य" दृश्य केस को संभालता है। मुझे आंशिक-विशिष्ट स्क्रिप्ट (अभी तक) की आवश्यकता नहीं है, इसलिए मैंने समाधान नहीं सोचा है। –

+0

नाइटपिक, जेएस सेक्शन को '' टैग से पहले रखें, '' टैग नहीं (ब्लॉकिंग को रोकें) – RPM1984

0

आप करना चाहेंगे:

<head> 
    <script src="@Url.Content("~/Scripts/jquery-1.7.1.js")" type="text/javascript"></script> 
    @RenderSection("head",false) 
</head> 

फिर प्रत्येक दृश्य में, आप एक अनुभाग है कि शीर्ष लेख में रेंडर किया जाएगा डाल सकते हैं इस तरह की एक विधि का उपयोग करें: Using Rails 3.1, where do you put your "page specific" javascript code?

+0

मैं उम्मीद कर रहा था कि यह विजुअल स्टूडियो के लिए कुछ लघुीकरण एडन के हिस्से के रूप में पहले से मौजूद है जो बहुत से समूह को समूहबद्ध करने की अनुमति देगा नियंत्रक या नियंत्रक समूह – Madd0g

0

@Ander: http://www.viget.com/inspire/extending-paul-irishs-comprehensive-dom-ready-execution/

यह पोस्ट देखें यदि आपको स्क्रिप्ट को हेड टैग में होने की आवश्यकता होती है तो यह दृष्टिकोण अच्छा होता है। लेकिन मुझे लगता है कि यदि यह पृष्ठ विशिष्ट जावास्क्रिप्ट है तो अधिकांश बार इसकी आवश्यकता नहीं होती है। आप अपने स्क्रिप्ट टैग्स को डाल सकते हैं जो आपकी स्क्रिप्ट फ़ाइलों को संदर्भ में जहां भी आवश्यक हैं, संदर्भित करते हैं। Automatically bundling and minification will be supported in ASP.NET 4.5। उस समय तक आप विजुअल स्टूडियो में yuicompressor को एकीकृत कर सकते हैं।

+0

द्वारा एक साथ छोटी जेएस फाइलें मैं वास्तव में हैरान हूं, मैंने सोचा कि मैं एक मूर्ख सवाल पूछ रहा था और लोग हंसने जा रहे हैं और मुझे lmgtfy लिंक प्रदान करते हैं। मैं अभी तक अपनी परियोजना में अभी तक नहीं हूं और जब भी मुझे पृष्ठ-विशिष्ट जावास्क्रिप्ट लिखने की आवश्यकता होती है तो यह मुझे दर्द देता है। एमवीसी की स्तरित नियंत्रक/दृश्य प्रणाली इस तरह के कुछ के लिए बिल्कुल सही है .. – Madd0g

+0

यह आवेदन के प्रकार पर निर्भर करता है। यदि आपके पास एक समृद्ध यूआई होगा जो AJAX पर बहुत निर्भर करता है तो पृष्ठ विशिष्ट जावास्क्रिप्ट आवश्यक है। इस मामले में आप Knouckout.js या Backbone.js जैसे ढांचे का उपयोग करके पृष्ठ में एमवीसी या एमवीवीएम को स्थानांतरित करते हैं। –

0

यह

(देखने की मेरी बात में) partials में स्क्रिप्ट का उपयोग करने के लिए एक सबसे अच्छा अभ्यास है नहीं है आप का सुझाव js अलग और पृष्ठ लोड पर या आंशिक अगर घटनाओं बाध्य करने के लिए आंशिक विशिष्ट स्क्रिप्ट लिखने के लिए ajax के माध्यम से लोड किया गया था फिर सफलता की घटना पर।

तो आप यह सुनिश्चित करें कि घटनाओं को कई बार बाध्य नहीं कर रहे हैं और देखने सिर्फ एक दृश्य

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

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