javascript - आंशिक विचारों में जावास्क्रिप्ट फ़ाइल शामिल करें




jquery asp.net-mvc (6)

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

एक उदाहरण: मैं 'चित्र गैलरी' आंशिक दृश्य के अंदर एक jquery picturegallery प्लगइन का उपयोग कर रहा हूं क्योंकि इस आंशिक दृश्य का उपयोग कई पृष्ठों पर किया जाएगा। इस प्लगइन को केवल तभी लोड किया जाना चाहिए जब इस दृश्य का उपयोग किया जाता है और मैं यह जानना नहीं चाहता कि प्रत्येक आंशिक दृश्य किस प्लगइन का उपयोग कर रहा है ...

आपके उत्तरों के लिए धन्यवाद।


hejdig।

Aspnetmvc3 के साथ चारों ओर बजाना मैंने तय किया, अभी के लिए, आंशिक रूप से मेरी जावास्क्रिप्ट फ़ाइल को शामिल करने के लिए

<script src = "@ url.Content (" ~ / स्क्रिप्ट / उपयोगकर्ता / List.js ")" टाइप = "टेक्स्ट / जावास्क्रिप्ट"> </ script>

यह जेएस फ़ाइल तब मेरी /user/List.schtml फ़ाइल के लिए विशिष्ट है।

/का


आज मैंने अपना खुद का समाधान बनाया है जो बिल को पूरी तरह से फिट करता है। चाहे यह अच्छी डिजाइन है या नहीं, आप सभी के लिए फैसला करना है, लेकिन सोचा कि मुझे किसी भी तरह से साझा करना चाहिए!

नीचे मेरी एचटीएमएल एक्सटेंशन श्रेणी है जो आपको अपने मास्टरपेज में ऐसा करने की अनुमति देती है:

<%=Html.RenderJScripts() %>

मेरा एचटीएमएल एक्सटेंशन वर्ग:

public static class HtmlExtensions
{
    private const string JSCRIPT_VIEWDATA = "__js";

    #region Javascript Inclusions

    public static void JScript(this HtmlHelper html, string scriptLocation)
    {
        html.JScript(scriptLocation, string.Empty);
    }

    public static void JScript(this HtmlHelper html, string scriptLocationDebug, string scriptLocationRelease)
    {
        if (string.IsNullOrEmpty(scriptLocationDebug))
            throw new ArgumentNullException("fileName");

        string jsTag = "<script type=\"text/javascript\" src=\"{0}\"></script>";

#if DEBUG
        jsTag = string.Format(jsTag, scriptLocationDebug);
#else
        jsTag = string.Format(jsTag, !string.IsNullOrEmpty(scriptLocationRelease) ? scriptLocationRelease : scriptLocationDebug);
#endif

        registerJScript(html, jsTag);
    }

    public static MvcHtmlString RenderJScripts(this HtmlHelper html)
    {
        List<string> jscripts = html.ViewContext.TempData[JSCRIPT_VIEWDATA] as List<string>;
        string result = string.Empty; ;
        if(jscripts != null)
        {
            result = string.Join("\r\n", jscripts);
        }
        return MvcHtmlString.Create(result);
    }

    private static void registerJScript(HtmlHelper html, string jsTag)
    {
        List<string> jscripts = html.ViewContext.TempData[JSCRIPT_VIEWDATA] as List<string>;
        if(jscripts == null) jscripts = new List<string>();

        if(!jscripts.Contains(jsTag))
            jscripts.Add(jsTag);

        html.ViewContext.TempData[JSCRIPT_VIEWDATA] = jscripts;
    }

    #endregion

}

क्या हो रहा है?
उपरोक्त वर्ग HtmlHelper.ViewContext.TempData को HtmlHelper.ViewContext.TempData संग्रह द्वारा संग्रहीत संग्रह में जावास्क्रिप्ट लिंक जोड़ने के तरीकों के साथ HtmlHelper.ViewContext.TempData । मास्टरपेज के अंत में मैंने <%=Html.RenderJScripts() %> जो HtmlHelper.ViewContext.TempData अंदर jscripts संग्रह को लूप करेगा और आउटपुट में प्रस्तुत करेगा।

हालांकि, एक नकारात्मक पक्ष है .. आपको यह सुनिश्चित करना होगा कि आप उन्हें जोड़ने से पहले स्क्रिप्ट प्रस्तुत न करें। यदि आप उदाहरण के लिए सीएसएस लिंक के लिए ऐसा करना चाहते हैं, तो यह काम नहीं करेगा क्योंकि आपको इन्हें अपने पृष्ठ के <head> टैग में रखना होगा और एचटीएमएलहेपर एक लिंक जोड़ने से पहले आउटपुट प्रस्तुत करेगा।


एमवीसी के डिजाइनरों को कोड-बैक का उपयोग करने से रोकने के लिए बहुत सारी परेशानी हुई, लेकिन <viewname> .aspx.cs नाम की एक फ़ाइल बनाकर और एएसपीएक्स पेज के विरासत गुण को संशोधित करके, अभी भी उन्हें प्राप्त करना संभव है ।

मैं कहूंगा, शामिल करने के लिए सबसे अच्छी जगह कोडबेहिंड में पेज_लोड हैंडलर में होगी (पेज का उपयोग करके। क्लाइंटस्क्रिप्ट। रजिस्ट्रार क्लाइंटस्क्रिप्ट शामिल)।


पसंदीदा दृष्टिकोण नीचे की ओर स्क्रिप्ट डालना है , हालांकि, यदि आप इससे बच नहीं सकते हैं तो उन्हें मध्य में रखना उचित है।

ब्राउज़र आमतौर पर समानांतर में विभिन्न पृष्ठ तत्व लोड करते हैं, हालांकि, ब्राउज़र जावास्क्रिप्ट फ़ाइल डाउनलोड कर रहा है, लेकिन जब तक जावास्क्रिप्ट डाउनलोड नहीं किया जाता है तब तक यह समानांतर में कोई अन्य पृष्ठ तत्व डाउनलोड नहीं करेगा। इसका मतलब यह है कि आपकी छवियों और क्या इंतजार नहीं करना होगा, इसलिए इसे आमतौर पर नीचे स्क्रिप्ट को स्थानांतरित करने के लिए बेहतर माना जाता है लेकिन यदि आपकी स्क्रिप्ट छोटी है तो मैं इसके बारे में चिंता नहीं करता।


मेरी वरीयता एक प्लगइन.मास्टर पेज बनाना होगा जो आपके मुख्य साइट.मास्टर से प्राप्त होगा। विचार यह है कि आप प्लगइन.मास्टर में इन प्लगइन्स को भरते हैं और 8 या ऐसे पेज बनाते हैं जो प्लगइन.मास्टर से प्राप्त करने के लिए इस आंशिक दृश्य का उपयोग करेंगे।







partial-views