javascript कार्य - आवश्यकताएँ पुस्तकालय के परिभाषित की व्याख्या




उद्देश्य प्रबंधन (5)

डिफेंस जेएसजे के लिए विशिष्ट नहीं है, यह एएमडी विनिर्देश का हिस्सा है। बर्क नोट करेगा कि रिक्जेस्ट बिल्कुल एएमडी को लागू नहीं करता है, क्योंकि एएमडी वास्तव में ब्राउज़रों को ध्यान में नहीं रखता है।

define में एक अनाम फ़ंक्शन नहीं है। define एक विधि है जो एएमडी आधारित जावास्क्रिप्ट फ़ाइलों को उनके डेटा को लोड करने के लिए उपलब्ध है। आवश्यकताएँ जैसे पुस्तकालय आपको यह उपलब्ध कराते हैं। विशिष्ट कार्यान्वयन शायद आपके लिए मूल्यवान नहीं है। इसलिए मैं आपके द्वारा दिए गए एक मॉड्यूल को घोषित करने का सबसे सामान्य तरीका हूं।

define( [array] , object );

एरे मॉड्यूल की एक सूची है जो इस मॉड्यूल पर निर्भर करती है। मॉड्यूल और फ़ाइलों के बीच 1 से 1 संबंध है। आप एक फ़ाइल में कई मॉड्यूल नहीं रख सकते हैं और न ही एक मॉड्यूल के लिए कई फाइलें।

ऑब्जेक्ट वह मॉड्यूल है जिसे आप परिभाषित कर रहे हैं। यह कुछ भी हो सकता है, एक संरचना, या एक फ़ंक्शन जो एक संरचना को लौटाता है। अधिक जानकारी के लिए आवश्यकताएँ पर डॉक्स पढ़ें।

यदि ऑब्जेक्ट एक फ़ंक्शन है, तो फ़ंक्शन को दिए गए तर्क पहले परिभाषित तर्क में निर्भरता के रूप में सूचीबद्ध मॉड्यूल हैं। जब आप किसी फ़ंक्शन को object रूप में पास करते हैं, तो यह नोट करना भी महत्वपूर्ण है, यह केवल एक बार चलेगा। इस एक तात्कालिकता पर बनाए गए तरीकों या गुणों को किसी भी समय एक्सेस किया जा सकता है, फिर अन्य मॉड्यूल द्वारा एक्सेस किया जा सकता है जो इस मॉड्यूल को निर्भरता के रूप में सूचीबद्ध करते हैं।

सौभाग्य, मैं सलाह देता हूं कि इसके साथ खेलना और डॉक्स पढ़ना जब चीजें समझ में न आएं। एएमडी मॉड्यूल कैसे काम करता है इस पर एक त्वरित शुरुआत के रूप में आवश्यकताएँ डॉक्स महान हैं।

मैंने आवश्यकताएँ के बारे में कई ट्यूटोरियल पढ़ना शुरू किया। उनमें से कोई भी "परिभाषित" कीवर्ड मेरे लिए संतोषजनक ढंग से नहीं समझाया गया था। किसी ने मुझे निम्नलिखित के साथ मदद कर सकता है:

define(
  ["Models/Person", "Utils/random", "jquery"], 
  function (Person, randomUtility, $) {..}
)  

"परिभाषित" क्या है? क्या किसी फ़ंक्शन को किसी सरणी और उसके अंदर एक अनाम फ़ंक्शन के साथ परिभाषित किया जाता है? या यह कुछ और है? क्या कोई मुझे इस तरह की परिभाषाओं के बारे में अधिक जानकारी दे सकता है?

जोड़: अपने जवाब के लिए धन्यवाद nnnnnn और pradeek। यहाँ यूरोप में रात के 2:30 बज रहे थे जब मैं प्रश्न पोस्ट कर रहा था। शायद इसलिए मैंने पहचाना नहीं कि यह एक साधारण फ़ंक्शन कॉल था।


मुझे लगता है कि RequireJS इसे बहुत अच्छी तरह से बताता है:

यदि मॉड्यूल में निर्भरताएं हैं, तो पहला तर्क निर्भरता नामों की एक सरणी होना चाहिए, और दूसरा तर्क परिभाषा फ़ंक्शन होना चाहिए। सभी निर्भरताएं लोड होने के बाद फ़ंक्शन को मॉड्यूल को परिभाषित करने के लिए कहा जाएगा। फ़ंक्शन को एक ऐसी वस्तु वापस करनी चाहिए जो मॉड्यूल को परिभाषित करती है।

वे परिभाषित के सभी विभिन्न वाक्यात्मक रूपों के उदाहरणों को सूचीबद्ध करते हैं।


मुझे आवश्यकता के नीचे define परिभाषित मिला। Js (मैं भी सोच रहा था कि यह define शब्द किस तरह की चीज है, और यह वह उत्तर है जिसकी मुझे तलाश थी):

/**
 * The function that handles definitions of modules. Differs from
 * require() in that a string for the module should be the first argument,
 * and the function to execute after dependencies are loaded should
 * return a value to define the module corresponding to the first argument's
 * name.
 */
define = function (name, deps, callback) {
    var node, context;

    //Allow for anonymous modules
    if (typeof name !== 'string') {
        //Adjust args appropriately
        callback = deps;
        deps = name;
        name = null;
    }

    //This module may not have dependencies
    if (!isArray(deps)) {
        callback = deps;
        deps = null;
    }

    //If no name, and callback is a function, then figure out if it a
    //CommonJS thing with dependencies.
    if (!deps && isFunction(callback)) {
        deps = [];
        //Remove comments from the callback string,
        //look for require calls, and pull them into the dependencies,
        //but only if there are function args.
        if (callback.length) {
            callback
                .toString()
                .replace(commentRegExp, '')
                .replace(cjsRequireRegExp, function (match, dep) {
                    deps.push(dep);
                });

            //May be a CommonJS thing even without require calls, but still
            //could use exports, and module. Avoid doing exports and module
            //work though if it just needs require.
            //REQUIRES the function to expect the CommonJS variables in the
            //order listed below.
            deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps);
        }
    }

    //If in IE 6-8 and hit an anonymous define() call, do the interactive
    //work.
    if (useInteractive) {
        node = currentlyAddingScript || getInteractiveScript();
        if (node) {
            if (!name) {
                name = node.getAttribute('data-requiremodule');
            }
            context = contexts[node.getAttribute('data-requirecontext')];
        }
    }

    //Always save off evaluating the def call until the script onload handler.
    //This allows multiple modules to be in a file without prematurely
    //tracing dependencies, and allows for anonymous module support,
    //where the module name is not known until the script onload event
    //occurs. If no context, use the global queue, and get it processed
    //in the onscript load callback.
    (context ? context.defQueue : globalDefQueue).push([name, deps, callback]);
};

मुझे यह पृष्ठ क्यों मिला AMD? बहुत मददगार। इस पृष्ठ से संक्षेप में, एएमडी विनिर्देश "निर्भरता के साथ स्क्रिप्ट टैग का एक गुच्छा लिखने पर काबू पाने में सहायक है जिसे आपको मैन्युअल रूप से ऑर्डर करना होगा" समस्या। यह आवश्यक कार्य निष्पादित करने से पहले आश्रितों को लोड करने में सहायक है, अन्य प्रोग्रामिंग भाषाओं जैसे कि पायथन में import करने के लिए। एएमडी वैश्विक नाम स्थान प्रदूषण की समस्या को भी रोकता है। चेक करें "It is an improvement over the web's current "globals and script tags" because" अनुभाग।


त्रुटि आपको बता रही है कि x भी मौजूद नहीं है! इसे घोषित नहीं किया गया है, जो एक मूल्य आवंटित करने से अलग है।

var x; // declaration
x = 2; // assignment

यदि आपने x घोषित किया है, तो आपको कोई त्रुटि नहीं मिलेगी। आपको एक चेतावनी मिलेगी जो undefined कहती है क्योंकि x मौजूद है / घोषित किया गया है लेकिन उसे मूल्य नहीं दिया गया है।

यह जांचने के लिए कि क्या वैरिएबल घोषित किया गया है, आप typeof उपयोग कर सकते हैं, यह जांचने की कोई अन्य विधि है कि कोई वैरिएबल मौजूद है, जो आपको प्रारंभिक त्रुटि को बढ़ाएगा।

if(typeof x  !==  "undefined") {
    alert(x);
}

यह x में संग्रहीत मान के प्रकार की जांच कर रहा है। जब x घोषित नहीं किया गया है या इसे घोषित किया गया है और अभी तक असाइन नहीं किया गया है तो यह केवल undefined होगा।





javascript requirejs