2013-10-30 9 views
8

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

मैं निम्न फ़ोल्डर संरचना है:

index.html 
scripts/ 
    lib/ 
    require.js 
    test/ 
    main2.js 
    config.js 

index.html की सामग्री: config.js की

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="utf-8" /> 
     <title>Test</title> 
     <script data-main="test/main2" src="scripts/lib/require.js"></script> 
     <script src="scripts/config.js"></script> 
    </head> 

    <body></body> 
</html> 

सामग्री:

requirejs.config({ 
    baseUrl: "scripts" 
}); 

और मैं एक 404 हो रही है के लिए त्रुटि: प्राप्त करें [...]/स्क्रिप्ट/main2.js, भले ही इसे [...]/स्क्रिप्ट/test/main2.js की तलाश करनी चाहिए। अगर मैं config.js फ़ाइल को हटाता हूं और डेटा-मुख्य = "स्क्रिप्ट/टेस्ट/मेन 2" का उपयोग करता हूं, तो यह काम करता है, लेकिन मैं अपने प्रोजेक्ट के लिए बेसयूआरएल निर्दिष्ट करने में सक्षम होना चाहता हूं।

कोई विचार?

संपादित करें: मुलायम द्वारा जवाब निम्नलिखित:

  • यहां तक ​​कि अगर मैं अपने डेटा-मुख्य में "स्क्रिप्ट/परीक्षण/main2" "/ लिपियों/परीक्षण/main2", या "whateverIWant/main2" का उपयोग , यह अजीब तरह से हमेशा "लिपियों/main2.js"

ध्यान दें कि मैं requirejs 2.1.8

+0

मैंने अपना आखिरी बार वापस ले लिया है संपादित करें - यह आपके प्रश्न में स्वीकृत उत्तर से कोड देखने के लिए भ्रामक था। तथ्य यह है कि आपने उत्तर स्वीकार कर लिया है, अन्य उपयोगकर्ताओं को यह बताने के लिए पर्याप्त है कि आपके प्रश्न में समस्या का समाधान क्या है! – Luca

उत्तर

11

यह काम नहीं कर रहा उपयोग कर रहा हूँ के लिए लग रहा है आप इसे कैसे क्योंकि आप एक साथ की आवश्यकता होती है कॉल कर रहे हैं करना चाहते हैं बेसURL सेट करने से पहले डेटा-मुख्य। मुझे यकीन नहीं है कि यह स्क्रिप्ट/main2.js पर जाने का प्रयास क्यों कर रहा है; मैं उम्मीद करता हूं कि यह स्क्रिप्ट/main2.js के बजाय test/main2.js लोड करने का प्रयास करेगा। हालांकि, यह बिंदु के बगल में है।

आपको क्या करना है यह सुनिश्चित करना है कि आपका बेसURL आपको डेटा-मुख्य लोड करने से पहले आवश्यकतानुसार उपलब्ध हो। इसे पहले अपनी कॉन्फ़िगरेशन और दूसरे उदाहरण से वाक्यविन्यास का उपयोग करके पूरा किया जा सकता है: http://requirejs.org/docs/api.html#config। index.html की


सामग्री:

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="utf-8" /> 
     <title>Test</title> 
     <script src="scripts/config.js"></script> 
     <script data-main="test/main2" src="scripts/lib/require.js"></script> 
    </head> 

    <body></body> 
</html> 

config.js की सामग्री:

var require = { 
    baseUrl: "scripts" 
}; 
+0

आपके लिए बहुत बहुत धन्यवाद उत्तर। मैंने आपकी विधि का परीक्षण किया जो डेटा-मुख्य विशेषता पर भरोसा नहीं करता है, और यह काम करता है। हालांकि, अगर मैं डेटा-मुख्य ("स्क्रिप्ट/टेस्ट/मेन 2" या "/ स्क्रिप्ट/टेस्ट/मेन 2) में पूरा पथ देता हूं ") मुझे अभी भी 404 त्रुटि मिल रही है जिसमें यह स्क्रिप्ट/main2.js नहीं मिल सका, जो मेरे द्वारा दिए गए पथ से मेल नहीं खाता है। मैं requjs 2.1.8 का उपयोग कर रहा हूं। मैं डेटा-मुख्य विधि को प्राथमिकता दूंगा ताकि मैं इसका उपयोग कर सकूं विन्यास फाइल एफ या मुख्य आवेदन और इकाई परीक्षण। – personne3000

+0

आप सही हैं, पहला व्यक्ति काम नहीं करता था। मैंने स्थानीय रूप से दो परीक्षण चलाए और पहले विकल्प को हटाने के लिए अपना उत्तर अपडेट किया, और डेटा-मुख्य का उपयोग करने के लिए शेष समाधान को अपडेट किया। – Waxen

+0

प्रलेखन में बताए गए requ.js फ़ाइल से पहले कॉन्फ़िगरेशन सहित वास्तव में चाल है, आपको बहुत धन्यवाद – personne3000

7

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

मेरे प्रयोगों में, मैंने सीखा कि डेटा-मुख्य कॉन्फ़िगरेशन जेएस फ़ाइल का उपयोग कर मूल्य निर्धारित करना काम कर सकता है (फिर, फिर से, यह संभवतः नहीं हो सकता है)। सामान्य रूप से आवश्यक और एएमडी और एसिंक्रोनिसिटी के लिए उन नए लोगों के लिए, "काम कर सकता है" धारणा को इस तथ्य के साथ करना होगा कि एसिंक्रोनस ऑपरेशंस तब चल सकता है जब किसी भी अनुमानित क्रम में नहीं हो सकता है।

की स्थापना के बाद कि, वहाँ एक बहुत ही महत्वपूर्ण RequireJS प्रलेखन है कि मुझे अब तक नहीं मिल पाया के वर्तमान संस्करण में किए गए है:

तुम भी अपने डेटा-मुख्य प्रवेश बिंदु से require.config कॉल कर सकते हैं, लेकिन ध्यान रखें कि डेटा-मुख्य स्क्रिप्ट को असीमित रूप से लोड किया गया है। अन्य प्रविष्टि बिंदु स्क्रिप्ट से बचें जो गलत तरीके से मानते हैं कि डेटा-मुख्य और इसकी require.config हमेशा उनके स्क्रिप्ट लोडिंग से पहले निष्पादित होगा।

अधिक जानकारी के लिए देखें: http://requirejs.org/docs/api.html#data-main

RequireJS करने के लिए नए होने के नाते, मैं हल्का इस जानने के लिए चकित था - और मैं डिबग पथ का उपयोग करने की कोशिश कर समस्याओं में बहुत समय बर्बाद किया। इस स्तर पर यह मेरे लिए अस्पष्ट नहीं है कि कोई भी डेटा-मुख्य (विशेष रूप से बेसयूआरएल को परिभाषित करने के लिए) का उपयोग क्यों करेगा क्योंकि यह संदर्भ केवल यादृच्छिक रूप से काम करेगा। इसके बजाय इस थ्रेड द्वारा सुझाए गए समाधान (जिसमें आप एक स्क्रिप्ट टैग में बेसयूआरएल सेट करते हैं जो असीमित नहीं है, अपेक्षित काम करेगा और RequJS को बंद करने से पहले RequJS कॉन्फ़िगरेशन को विश्वसनीय रूप से सेट करेगा।

+4

यह मजाकिया है कि आप "हल्के ढंग से अपमानित" कहते हैं, यह वास्तव में मुझे बंद कर देता है ... फिर आवश्यकता के बिंदु क्या है requjs खुद को यह भी गारंटी नहीं दे सकता कि इसकी कॉन्फ़िगरेशन लोड हो गई है? आईएमओ, यह एक गंभीर कमी है। इसके बाद जवाब, "आपके सभी कोड से पहले केवल ['स्क्रिप्ट/कॉन्फ़िगरेशन'] की आवश्यकता नहीं है" लेकिन एक नया फ़ंक्शन, "आवश्यक" या "आवश्यक WithConfig" जोड़ने के लिए जो कॉन्फ़िगरेशन वास्तव में लोड होने तक प्रतीक्षा करेगा, और संभावित रूप से दौड़ नहीं पाएगा अगर कॉन्फ़िगरेशन लोड करने में विफल रहता है, तो यादृच्छिक जावास्क्रिप्ट त्रुटियों की तुलना में बेहतर है जो कॉन्फ़िगरेशन को ठीक से लोड करने वाली चीज़ों को लोड करने में असमर्थ हैं। – enorl76