2011-10-19 16 views
5

मैं यह पता लगाने की क्या सबसे अच्छा अभ्यास एक MVC अनुप्रयोग में jQuery का उपयोग कर के लिए है कोशिश कर रहा हूँ। विशेष रूप से, मैं जानना चाहता हूं कि मुझे क्या करना चाहिए ताकि मैं व्यक्तिगत दस्तावेज़ों के साथ अपने सभी विचारों को अव्यवस्थित न कर सकूं। पहले से ही कथन।ASP.net MVC - दृश्य और jQuery उत्तम आचरण

एक उदाहरण के रूप:

मैं निम्नलिखित दृश्य है:

/Views/Shared/_Layout.cshtml
/Views/Home/Index.cshtml
/Views/Home/_Dialog.cshtml
/Views/Home/_AnotherDialog.cshtml

मैं एक नियंत्रक कार्रवाई है कि घर/सूचकांक देखें प्रस्तुत करना होगा, जो लेआउट का उपयोग करता है और दो आंशिक विचार प्रस्तुत करता है (या संपादक टेम्पलेट्स, डिस्प्ले टेम्पलेट्स इत्यादि)। यह एक नियंत्रक कार्रवाई ने 4 या अधिक विचार प्रस्तुत किए हैं। प्रत्येक दृश्य कुछ jquery दस्तावेज़ का उपयोग कर रहा है। पहले से ही कोड।

// In Index 
<script type="text/javascript"> 
    $(function() { 
     $('#tabs').tabs() 
    }); 
</script> 

// In _Dialog 
<script type="text/javascript"> 
    $(function() { 
     $('#some-dialog').dialog(...); 
    }); 
</script> 

मैं जानता हूँ कि यह एक बहुत ही अच्छा अभ्यास है क्योंकि यह पहले से ही अपने छोटे परियोजना में अनियंत्रित हो रही है नहीं है:

वर्तमान में, मैं प्रत्येक दृश्य के तल पर कोड है। कुछ अच्छे व्यवहारों का पालन करने के लिए जब मैं पृष्ठों है कि सभी विचारों के दर्जनों भर में अलग कुछ jQuery/जावास्क्रिप्ट प्रवर्तन कोड की जरूरत है की टन है क्या हैं?

उत्तर

2

आप क्या Telerik उनके जावास्क्रिप्ट रजिस्ट्रार के साथ क्या की तर्ज पर कुछ कर सकते हैं। असल में, इस रजिस्ट्रार को अपने दृश्य मॉडल में उपलब्ध कराएं।सरलतम स्तर पर, सभी यह करने के लिए है यह करने के लिए जोड़ा तार का ट्रैक रखने के है:

public class JavascriptRegistrar 
{ 
    private StringBuilder jsBuilder_ = new StringBuilder(); 

    public Add(string js) 
    { 
     builder.Append(js).Append('\n'); 
    } 


    public string ToString() 
    { 
     return "<script type=\"text/javascript\">" + jsBuilder_.ToString() + "\n</script>"; 
    } 
} 

आपका आंशिक दृश्य तो यह करने के लिए जोड़ देगा जब प्रतिपादन:

<h1>In my view!</h1> 

@Model.Registrar.Add("$function() { /* ... */ }") 

अंत में, के तल पर अपने मुख्य दृश्य, आपका काम पूरा हो:

@Model.Registrar.ToString() 

कौन सा बाहर सभी जावास्क्रिप्ट यह प्रदान करने के दौरान एकत्र किया है लिखेगा।

2

तो initialisation एक दृश्य के लिए विशिष्ट है और आप जानते हैं कि यह निश्चित रूप से उस दृश्य के बाहर उपयोग नहीं किया जाएगा, उदाहरण के लिए कुछ पेज विशिष्ट व्यवहार है, तो बस यह ध्यान में रखते हुए छोड़ दो!

अपने सभी विचारों में स्क्रिप्ट टैग होने, जब तक आप विचारों के बीच js नकल नहीं कर रहे हैं के रूप में के साथ गलत कुछ भी नहीं है। मुझे लगता है कि लोगों को इस मामले में की चिंताओं की जुदाई 'गलत करते हैं और लगता है कि बस का अर्थ है' विभिन्न भाषाओं दूर एक दूसरे से हर हालत में रखने '... कि गलत है, स्पष्ट रूप से अगर कुछ पेज initialisation तर्क/व्यवहार एक के लिए विशिष्ट है पेज, तो एचटीएमएल और जे एस आंतरिक रूप से 'चिंता का विषय' एक दूसरे को है, इसलिए एक अलग फ़ाइल में js नहीं चलती वास्तव में 'अच्छा अभ्यास', अगर कुछ इसे अपने कोड और अधिक कठिन समझने के लिए बनाता है।

मैं व्यक्तिगत रूप से एक दृश्य को खोलने, और सभी js और सीएसएस है कि जैसे ही मैं इसे खोलने के रूप में उस पृष्ठ के लिए विशिष्ट है देखने के लिए सक्षम होना चाहते हैं, यह अच्छा और पठनीय बनाता है। हालांकि, स्पष्ट रूप से कोड तो साझा करने की जरूरत है, तो आप इसे अपने दृश्य बाहर खराब और अपनी स्क्रिप्ट फ़ोल्डर में मिल whwere यह कुछ भी से संदर्भित हो सकते करने के लिए की जरूरत है!

संपादित

अपने उदाहरण में ऊपर मैं अपने सूचकांक में देखते हैं, आप अपने टैब आरंभ देखने। यह ठीक है के रूप में यह है, तथापि है, यदि आप इस परियोजना में कहीं और टैब जोड़ा तो यह नहीं बल्कि #tabs आईडी की तुलना में एक .tabs वर्ग का उपयोग कर अपने टैब बनाने के लिए बेहतर हो सकता है, और फिर एक बाहरी जे एस फ़ाइल में से एक ही बार में अपने सभी टैब आरंभ $('.tabs') पर कॉल करना।

+0

समस्या मेरे पास सभी अलग रखने के साथ है (भले ही वे दृश्य के लिए विशिष्ट हों) में 10 या अधिक अलग दस्तावेज़ हैं। पहले से ही एक पृष्ठ के लिए हैंडलर हैं। मुझे यकीन नहीं है कि ऐसा करने से प्रदर्शन प्रभावित होगा या नहीं। – Dismissile

+0

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

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