RequireJS हमेशा एसिंक्रोनस रूप से मॉड्यूल को लोड करता है, लेकिन यह require
का एक रूप है कि तुल्यकालिक लग रहा है की अनुमति देते हैं। आपका दूसरा स्निपेट वास्तव में कुछ वाकई महत्वपूर्ण कोड खो रहा है। (इसके अलावा, jQuery के लिए मॉड्यूल नाम jquery
पर हार्डकोड किया गया है। आप एक कॉन्फ़िगरेशन लिख सकते हैं जो आपको jQuery
के रूप में संदर्भित करने की अनुमति देता है लेकिन कोई बिंदु नहीं है।) require
कॉल का यह रूप मॉड्यूल के अंदर उपयोग करने के लिए डिज़ाइन किया गया है:
define(['jquery'], function (require) {
var $ = require("jquery");
$.doSomething();
});
नोट define
के पहले तर्क के रूप में निर्भरता के अलावा:
define(function (require) {
var $ = require("jquery");
$.doSomething();
});
RequireJS ऊपर कोड के साथ क्या करता है यह इस रूप में बदल यह निष्पादित करने से पहले है। जब RequJS कोड निष्पादित करता है, तो यह निर्भरता पाता है, jquery
लोड करता है और फिर अनाम कार्य को कॉल करता है। require("jquery")
उस समय तक मॉड्यूल पहले ही लोड हो चुका है। दिन के अंत में require
पर कॉल करें सिंक्रोनस दिखता है, मॉड्यूल की लोडिंग के लिए यह अभी भी असंकालिक रूप से होता है।
क्या आप इस सिंक्रोनस फॉर्म require
का उपयोग define
कॉल के बाहर कर सकते हैं? केवल अगर आप असफलताओं के साथ ठीक हैं। यह require
कॉल विफल हो जाएगा यदि मॉड्यूल पास हो गया है तो पहले ही लोड नहीं हुआ है। आप कुख्यात त्रुटि मिलती है: एक define
में
Module name ... has not been loaded yet for context: ...
इसका इस्तेमाल करते हुए जैसे मैं ऊपर दिखाए गए हैं सुरक्षित है।या फिर मुझे लगता है कि तुम कर सकते हो:
require(['jquery'], function (require) {
var $ = require("jquery");
$.doSomething();
});
जो होगा काम लेकिन मैन्युअल रूप से निर्भरता दोहराने की बात क्या है। (मामले में आप आश्चर्य है, RequireJS एक मैं उसी तरह यह बदल देती है एक define
कॉल के रूप में मैं ऊपर दिखाए गए हैं में यहाँ मेरी उदाहरण में है की तरह एक कॉलबैक के साथ एक require
कॉल को बदलने नहीं है।)
धन्यवाद। अब यह सब स्पष्ट है, कोड दूसरे तरीके से थोड़ा अच्छा और क्लीनर दिखता है जैसा कि मैंने इसे देखा है। :) – Er85