में डूरंडल के साथ एक मॉड्यूल के लिए jQuery निर्भरता को परिभाषित करना मैं आवश्यकताजेएस को समझने की कोशिश कर रहे सर्कल में गोल और गोल कर रहा हूं और निर्भरताओं को लोड करने के लिए इसका उपयोग कैसे करें, जब मैं कोशिश करता हूं और उनका उपयोग करता हूं तो अपरिभाषित के रूप में दिखाई नहीं देता मॉड्यूल में।हॉटटॉवेल एसपीए
मैंने जॉन पापा के प्लुरसाइट "एचटीएमएल 5 के साथ एसपीए" पाठ्यक्रम के साथ शुरुआत की। जो मैंने कभी नहीं समझा था, वह था कि प्रत्येक लाइब्रेरी को एक स्क्रिप्ट टैग में निर्दिष्ट करने की आवश्यकता क्यों थी, जब मैंने सोचा कि एएमडी के पूरे बिंदु की आवश्यकता है, तो यह था कि आपने इसकी ज़िम्मेदारी सौंपी थी और इसके डेटा-मुख्य विशेषता को असीमित रूप से लोड किया गया था क्या आवश्यक था उस पाठ्यक्रम में प्रस्तुत समाधान के बारे में दोगुना भ्रमित करने वाला क्या था, यह RequJS दस्तावेज़ में दस्तावेज किए गए पूरे डेटा-मुख्य सेट का पालन नहीं करता था।
कुछ महीनों में आगे बढ़ें और अब हमारे पास एक नमूना "सेवा" मॉड्यूल, एक सेट-अप है जो टूरंडल के साथ "हॉट टॉवेल" टेम्पलेट है, जो कि आवश्यकताजेएस दस्तावेज का पालन करता है और स्टार्टर ऐप को समझने में काफी आसान है। अलार्म घंटी बजाने वाली एकमात्र चीज यह विचार है कि अधिकांश पुस्तकालय सामान्य "स्क्रिप्ट" फ़ोल्डर में होते हैं जबकि Durandal एप्लिकेशन तर्क के साथ पूरी तरह से अलग 'ऐप' फ़ोल्डर में होता है। अगर मैंने बहुपक्षीय एसपीए पाठ्यक्रम से एक चीज सीखी है और आवश्यकता के साथ खेल रहा है तो यह है कि एक फ़ोल्डर की चीजों से बाहर चलती चीजें बहुत जल्दी गन्दा हो जाती हैं।
वैसे भी, नया टेम्पलेट ठीक काम करता है। मॉड्यूल निर्भरता महान काम कर रही हैं, दृश्य और दृश्य मॉडल बाध्यकारी हैं और एक डंडंडल मॉड्यूल (यानी ऐप फ़ोल्डर में) पर मॉड्यूल निर्भरता के साथ एक नमूना लॉगर मॉड्यूल है जो बहुत अच्छा काम करता है। हॉट टॉवेल टेम्पलेट में मौजूद कोड के आधार पर jQuery और mockJson का उपयोग करने वाला एक और सरल मॉड्यूल जोड़ने के लिए यह आसान होना चाहिए, है ना? एर, नहीं, वास्तव में नहीं।
यहाँ मेरी मॉड्यूल 'dataservice.js' अंदर 'एप्लिकेशन/सेवाओं' फ़ोल्डर
define(['jquery'],
function ($) {
var init - function....
मैं निश्चित रूप से करते हैं जब मैं कोशिश करने के लिए $ 'अनिर्धारित' और उपयोग की शुरुआत के लिए एक बहुत ही सरल घोषणा है यह मेरे कोड ब्लॉक के भीतर है। अब तक बहुत ज्यादा भ्रमित साहित्य पढ़ने के बाद (जिसमें से अधिकांश एक टिप्पणी के साथ समाप्त होता है कहने के लिए 'यह बदल में jQuery xxxx इसलिए किसी भी अधिक प्रासंगिक नहीं है') मैं निम्नलिखित प्रश्न हैं:
मैं जब की निगरानी नेटवर्क यातायात मैं देख सकता हूं कि jQuery लाइब्रेरी सही ढंग से डाउनलोड की जा रही है, जैसा कि mockJSON है यदि मैं इसे BundleConfig.cs में परिभाषित 'विक्रेता' बंडल में जोड़ता हूं तो jQuery वहां है और मेरे ब्राउज़र में प्रतीक्षा कर रहा है, भले ही मैंने नहीं दिया हो यह एक मॉड्यूल परिभाषा खुद है।
require.config({ paths: { 'text': 'durandal/amd/text', jquery: '../Scripts/jquery-1.9.1' } });
(। 'पाठ' घोषणा पहले से ही वहाँ था मैं बस jQuery उर्फ जोड़ा) यह: मेरे मॉड्यूल दस्तावेज में 'अनिर्धारित' संदर्भ से छुटकारा पाने के लिए मैं जैसे निम्नलिखित कुछ जोड़ने की जरूरत है मतलब लग रहा था मेरे मॉड्यूल को 'अपरिभाषित' की बजाय फ़ंक्शन करने का कारण बनता है जो समस्या का हिस्सा हल करता है सिवाय इसके कि यह स्क्रिप्ट की दूसरी प्रतिलिपि का कारण बनता है जिसे मैंने पहले ही हॉट टॉवेल टेम्पलेट्स 'विक्रेता' बंडल के कारण डाउनलोड किया है। मैं स्पष्ट कारणों से jQuery की दो प्रतियां डाउनलोड नहीं करना चाहता हूं तो मैं इसे कैसे ठीक करूं?
मैं अपने 'विक्रेता' बंडल के mockJSON पुस्तकालय जोड़ दिया है और यह सामान्य रूप से $ .mockJSON का उपयोग कर मैं इस वैध बनाने के लिए कुछ नहीं कर सकते करने के लिए जाना जाता है। भले ही मैं उसी प्रक्रिया का उपयोग करके स्क्रिप्ट के संदर्भ में हैक करता हूं, मैंने jquery के लिए 'require.config ({पथ:' घोषणा के साथ किया है, मुझे अपरिभाषित हो रहा है, 'लाइब्रेरी दो बार डाउनलोड की गई है' समस्या का उल्लेख नहीं किया गया है मैं लाइब्रेरी निर्भरता को परिभाषित कैसे कर सकता हूं ताकि मॉड्यूल में उस लाइब्रेरी का मेरा उपयोग काम करेगा?
मुझे लगता है कि यह दर्द इस तथ्य के साथ कुछ करने के लिए है कि जेएस एसिंक्रोनस मॉड्यूल डाउनलोड करने के बारे में है, लेकिन jQuery और mockjson तुल्यकालिक हैं इसलिए मुझे उन्हें अन्य माध्यमों (बंडलिंग हार्ड-कोडेड संदर्भ) द्वारा डाउनलोड करना है, लेकिन इसका अभी भी मतलब है कि मेरी आवश्यकताएँ जेएस मॉड्यूल को निर्भरताओं के रूप में बताते हुए एक तरीका चाहिए और मैंने जो भी कोशिश की है वह काम नहीं कर रहा है। क्या इस बारे में मेरी धारणा एक सिंक्रोनॉय/असिंक्रोनस मुद्दा सही है? मुझे डूरंडल में कम से कम एक नमूना ऐप ढूंढने की उम्मीद थी जो jQuery और आदर्श रूप से एक jQuery प्लग-इन का उपयोग करता था, लेकिन मैं जो कुछ देख सकता हूं वह मॉड्यूल कोड है जो किसी और चीज़ के बजाए डूरंडल मॉड्यूल का उपयोग करता है। तथ्य यह है कि इन सभी पुस्तकालयों की आवश्यकता के लिए मुख्य रूट के बाहर हैं जेएस शायद समस्या को बढ़ा रहा है क्योंकि मुझे संदर्भ प्राप्त करने के लिए '../' तारों के साथ पथ का सहारा लेना है। क्या किसी को पता है कि 'दुरंदल को छोड़कर सभी पुस्तकालयों की यह संरचना एक फ़ोल्डर में क्यों है, लेकिन दुरंदल पूरी तरह से अलग है' मौजूद है?
मैं समझता हूं कि आवश्यक जेएस परिभाषा कमांड पर 'कॉन्फ़िगरेशन पर कॉन्फ़्रेंस' का उपयोग करता है ताकि अगर मैं मॉड्यूल आईडी को याद करता हूं तो यह मॉड्यूल स्रोत फ़ाइल नाम और डेटा का उपयोग करके निर्दिष्ट परिभाषित रूट फ़ोल्डर से पथ पर आधारित आईडी मानता है -मुख्य। हालांकि Durandal अपने कोड में 'प्रवेश' नामक एक मॉड्यूल को संदर्भित करता है। यह मॉड्यूल रूट फ़ोल्डर में नहीं है बल्कि 'Durandal/transitions/entrance.js' नामक फ़ोल्डर में है, इसलिए मैं उलझन में हूं कि इसका कोई संदर्भ 'डुरंडल/संक्रमण/प्रवेश' के बजाय 'प्रवेश' क्यों है। यह अलियासिंग कहां है?
अंत में (हुराह) मैंने उन निर्भरताओं को छोड़कर एक परिभाषित बयान बनाम पहले तर्क (एक स्ट्रिंग सरणी) के रूप में निर्भरताओं को निर्दिष्ट करने के बीच अंतर की सूक्ष्मता को समझ नहीं लिया है, लेकिन फिर मॉड्यूल फैक्ट्री में जो पहला तर्क बन जाता है var system = requ ('../ system') की तरह कुछ निर्दिष्ट करना - मैं एक रूप में प्राथमिकता में एक रूप का उपयोग क्यों करूंगा। मैं नमूना आवेदन में दो प्रकार मिश्रित देख रहा हूं और समझ में नहीं आता क्यों।
पीएस: जब मैं इस प्रविष्टि को संपादित करता हूं तो मुझे पांच प्रश्न 1 से 5 अंक दिखाई देते हैं। जब मैं इसे देखता हूं तो मुझे लगता है कि इसे 1 और फिर 1 से 4 के रूप में प्रस्तुत किया जाता है। कुछ अजीब HTML संपादक बनाम बग प्रतिपादित करते हैं कि इससे कोई फर्क नहीं पड़ता कि मैं किस प्रारूप को कोशिश करता हूं I टी ठीक करने में सक्षम नहीं है, इसलिए कृपया कोई टिप्पणी पोस्ट करें जैसे कि 2 अंकों के बजाय 1 से 5 अंक वाले पांच प्रश्न हैं और तीन क्रमांकित 2 से 4 अंक हैं!)
लिंक के लिए धन्यवाद। जानना अच्छा है कि हमें नॉकआउट के साथ कुछ समस्याएं आ सकती हैं यदि हम उस धागे में चर्चा के दृष्टिकोण का पालन नहीं करते हैं। मुझे एक समाधान के साथ काम करने वाली चीज़ें मिल गईं जो मैं अब पोस्ट करूंगा। –
यदि आप सामने वाले तृतीय पक्ष मॉड्यूल लोड करते हैं, तो आपको उन लोगों के लिए परिभाषित करने की चिंता करने की आवश्यकता नहीं है। जब वे लोड करते हैं तो उन्हें आवश्यकता नहीं होती है (cuz यह उसके बाद लोड होता है), इसलिए वे केवल वैश्विक स्थान में लोड होते हैं। और यदि आप इन्हें बहुत अधिक उपयोग करते हैं (जैसे $ और को), तो यह ठीक है। यदि आप मिश्रण और मैच करते हैं, तो हाँ, यह अजीब हो सकता है। लेकिन एएमडी में कुछ तीसरे पक्ष के libs मिश्रण और मैच करने का कोई कारण नहीं है और कुछ नहीं। आप एएमडी (और शिम वाले जो इसे समर्थन नहीं देते हैं) के साथ निश्चित रूप से सभी पुस्तकालयों का उपयोग कर सकते हैं, जैसा कि मैंने कोड कैंपर में किया था। लेकिन वास्तविक दुनिया के ऐप्स में आपको समस्याएं मिलेंगी, यही कारण है कि CodeCamper के लिए कॉन्फ़िगरेशन दिलचस्प था –
धन्यवाद जॉन। मुझे सच में लगता है कि इसे अगले एसपीए पाठ्यक्रम में और स्पष्टीकरण की आवश्यकता है। –