2011-01-22 11 views
66

मैंने अभी आवश्यकता के साथ काम करना शुरू कर दिया है। और मैं उन उचित मामलों पर थोड़ा अस्पष्ट हूं, जिनका उपयोग किया जाना चाहिए, साथ ही इसका उपयोग करने का सही तरीका उन मामलों में।समझना कि कैसे और कैसे उपयोग करें .JS

यहां बताया गया है कि वर्तमान में मेरे पास Requ.JS के साथ चीजें कैसे स्थापित की गई हैं। मेरे पास दो कार्य हैं, functionA() और functionB()। इन दोनों कार्यों को ठीक से काम करने के लिए एक अतिरिक्त फ़ंक्शन, functionC() की आवश्यकता होती है।

मैं केवल आवश्यक होने पर functionC() लोड करना चाहता हूं, यानी जब functionA() या functionB() को कॉल किया जा रहा है।

functionC.js

functionC(){ 
    //do stuff 
} 

functionA.js

functionA(){ 
    define(['functionC'],function(){ 
    //functionC() is loaded because it is listed as a dependency, so we can proceed 
    //do some functionA() stuff 
    }); 
} 

functionB.js

functionB(){ 
    define(['functionC'],function(){ 
    //functionC() is loaded because it is listed as a dependency, so we can proceed 
    //do some functionB() stuff 
    }); 
} 
: तो मैं निम्नलिखित फ़ाइलें

तो, क्या यह सही ढंग से स्थापित है? और यदि मैं एक ही पृष्ठ पर functionA() और functionB() दोनों को कॉल करना समाप्त करता हूं, तो क्या अतिरिक्त कार्य किया जा रहा है क्योंकि वे दोनों functionC.js फ़ाइल लोड करते हैं? यदि हां, तो क्या यह एक समस्या है? और यदि हां, तो इसे सेट अप करने का कोई तरीका है ताकि वे पहले यह देखने के लिए जांच कर सकें कि क्या functionC.js अभी तक लोड हो गया है, और अगर यह नहीं हुआ है तो केवल इसे लोड करें? अंत में, क्या यह Requ.JS का उचित उपयोग है?

उत्तर

44

define() केवल मॉड्यूल को परिभाषित करने के लिए उपयोग किया जाना चाहिए। ,

  • require([]) अतुल्यकालिक है:

    functionA.js

    functionA(){ 
        require(['functionC'],function(functionC){ 
        //use funcC in here to call functionC 
        }); 
    } 
    

    कुछ नोट: ऊपर के उदाहरण है, जहां कोड का एक टुकड़ा गतिशील लोड किया जाना चाहिए के लिए, require() का उपयोग कर अधिक उपयुक्त है इसलिए यदि functionA का कॉलर उस फ़ंक्शन से वापसी मूल्य की अपेक्षा कर रहा है, तो संभवतः त्रुटियां होंगी। यह सबसे अच्छा है अगर functionA कॉलबैक स्वीकार करता है जिसे functionA अपने काम के साथ किया जाता है।

  • उपरोक्त कोड functionA पर प्रत्येक कॉल के लिए require() पर कॉल करेगा; हालांकि, पहली कॉल के बाद, functionC.js लोड करने के लिए कोई दंड नहीं लिया गया है, यह केवल एक बार लोड किया जाता है। पहली बार require() कॉल हो जाता है, यह functionC.js लोड करेगा, लेकिन शेष समय, RequJS जानता है कि यह पहले ही लोड हो चुका है, इसलिए functionC.js फिर से अनुरोध किए बिना function(functionC){} फ़ंक्शन को कॉल करेगा।
+1

आपकी प्रतिक्रिया के लिए धन्यवाद - यह एक बहुत मदद मिलती है। परिभाषित() बनाम आवश्यकता() कुछ था जिस पर मुझे स्पष्टीकरण की आवश्यकता थी, और आपके अन्य दो बुलेट बिंदु वास्तव में बहुत मदद करते हैं। मुझे लगता है कि बुलेट पॉइंट्स में से पहला ऐसा कुछ है जिसे मुझे अभी भी बेहतर समझने की आवश्यकता है - आवश्यकताजेएस की असीमित प्रकृति को सही ढंग से कैसे संभालना है। – maxedison

21

आप RequireJS और यहाँ जावास्क्रिप्ट प्रतिरूपकता के बारे में जानकारी प्राप्त कर सकते: JavaScript modularity with RequireJS (from spaghetti code to ravioli code)

+4

शीर्ष लिंक - कई ट्यूटोरियल पढ़ रहे हैं, जो अब तक का सबसे अच्छा है। स्पष्ट और संक्षिप्त।+1 –

+11

लिंक सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, लेकिन [यह बेहतर होगा] (http://meta.stackexchange.com/q/8259) यहां उत्तर के आवश्यक हिस्सों को शामिल करने के लिए, और संदर्भ के लिए लिंक प्रदान करें। – JJJ

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