2012-05-15 12 views
14

पर ".js" जोड़ता है मैं requjs और टेक्स्ट प्लगइन के साथ काम करने की कोशिश कर रहा हूं और मुझे अजीब समस्या है।require.js टेक्स्ट प्लगइन फ़ाइल नाम

मैं दो वेब सर्वर:

  1. स्थानीय होस्ट: 3000 - CDN के रूप में कार्य और सभी स्टैटिक फ़ाइलें हैं: js, छवियों, सीएसएस और टेम्पलेट्स
  2. स्थानीय होस्ट: 3001 - सर्वर - बाकी सर्वर के रूप में कार्य और केवल एक फ़ाइल, main.html फ़ाइल की सेवा

main.html फ़ाइल लोड सभी js se से फ़ाइलें निम्न पंक्ति का उपयोग कर cond सर्वर: 3001

मैं उपयोग कर रहा हूँ:

<script data-main="http://localhost:3000/js/main" 
     src="http://localhost:3000/lib/require-jquery.js"></script> 

किसी कारण के लिए, जब requirejs पाठ प्लगइन का उपयोग कर, वह टेम्पलेट्स के लिए ".js" प्रत्यय जब स्थानीय होस्ट करने के लिए नेविगेट कहते हैं निम्न सिंटैक्स:

define ['jquery','backbone','underscore','models/model','text!templates/main.html', 
     'views/navigation', 'views/player', 'views/content', 'views/header'] 

जब मैं स्थानीय होस्ट पर जाएँ: 3000 यह ठीक काम करता है।

क्या आप किसी भी कारण से सोच सकते हैं कि टेक्स्ट प्लगइन को दूरस्थ सर्वर से टेक्स्ट फ़ाइलों की सेवा करने में समस्या होगी (उदाहरण के लिए, सीडीएन सर्वर)?

उत्तर

3

मैंने टेक्स्ट प्लगइन के कोड में खोला है।

मुझे पता चला है कि पाठ प्लगइन मानता है कि डेवलपर ने टेक्स्ट टेम्पलेट को HTML पर परिवर्तित कर दिया है क्योंकि यह किसी भिन्न डोमेन पर रहता है।

मैंने इसे ग्रहण करने के लिए टेक्स्ट प्लगइन का कोड बदल दिया है।

कोई सोचता है कि मैं कुछ गलत कर रहा हूं?

प्लगइन का मूल कोड:

  //Load the text. Use XHR if possible and in a browser. 
      if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) { 
       text.get(url, function (content) { 
        text.finishLoad(name, parsed.strip, content, onLoad, config); 
       }); 
      } else { 
       //Need to fetch the resource across domains. Assume 
       //the resource has been optimized into a JS module. Fetch 
       //by the module name + extension, but do not include the 
       //!strip part to avoid file system issues. 
       req([nonStripName], function (content) { 
        text.finishLoad(parsed.moduleName + '.' + parsed.ext, 
            parsed.strip, content, onLoad, config); 
       }); 
      } 
+1

समाधान एक बहुत टूटी वेबसाइट –

15

मैं पाठ प्लगइन के साथ मुसीबत लिया है जब डोमेन और शायद अपने दो स्थानीय होस्ट सर्वर यह भी मार रहे हैं भर में काम कर रहे।

वेब निरीक्षक में मैंने देखा कि require.jssome-content.html.js बजाय some-content.html जैसी चीजों को लाने के लिए कोशिश कर रहा था।

क्या आप इस कोड को विकास मोड में या उत्पादन सेट में बना रहे हैं? जब आप सब कुछ बंडल करते हैं तो पाठ प्लगइन में यह वही क्रॉस-डोमेन समस्या नहीं होनी चाहिए।

baseurl पेज कि होगा लोड require.js रूप में एक अलग डोमेन पर URL हो सकता है:

यहाँ API दस्तावेज़ों बात यह है कि (http://requirejs.org/docs/api.html से) मेरे टिप बंद है। RequJS स्क्रिप्ट लोडिंग डोमेन पर काम करता है। टेक्स्ट द्वारा लोड की गई टेक्स्ट सामग्री पर केवल प्रतिबंध ही है! प्लगइन्स: पथ पृष्ठ के समान डोमेन पर कम से कम विकास के दौरान होना चाहिए। अनुकूलन उपकरण टेक्स्ट इनलाइन करेगा! प्लगइन संसाधन ऑप्टिमाइज़ेशन टूल का उपयोग करने के बाद, आप संसाधन का उपयोग कर सकते हैं जो संदर्भ टेक्स्ट! किसी अन्य डोमेन से प्लगइन संसाधन।

Here's an article कि मुझे ब्राउज़रों कि समर्थन CORS के लिए इस को हल करने के मदद की:

+0

आपका लेख लिंक अंक द्वारा दिया गया है में useXhr विधि अधिभावी में था; वह चला गया। एक पार्क किए गए डोमेन या अब कुछ दिखता है। मैंने इसे संपादित किया है ताकि यह एक संग्रहीत संस्करण को इंगित कर सके। ध्यान दें कि यह उत्तर 4 साल पहले लिखा गया था ... तो 40 "वेब साल" पहले की तरह :) – ruyadorno

+1

वाह, तुम सही हो करने के लिए @ alex3683 – iX3

0

मैं हर समाधान मैं में r.js अनुकूलक चल रहा है और मेरे टेम्पलेट संकलन से अलग इंटरनेट पर देखा पोस्ट किया है पर काट दिया गया है .js फ़ाइल।

अपने टेम्पलेट्स को अपनी index.html फ़ाइल के समान निर्देशिका में रखना एक अस्थायी काम है। यह निश्चित रूप से समस्या का समाधान नहीं करता है, लेकिन यदि आप एक स्थिर स्थिति में थे, तो यह कम से कम आपको फिर से ले जाएगा।

+0

समस्या का समाधान नहीं करता है और यह मेरे लिए काम नहीं करता है। – Warpzit

0

मैं एक ही समस्या में भाग गया और यह तय करना था कि main.js फ़ाइल को * .htm फ़ाइलों के समान डोमेन से लोड किया गया था। जब वे मतभेद करते थे, तो एचटीएमएल फाइलों में .js को जोड़ना होगा, जिसके परिणामस्वरूप 404s होंगे।

+0

अभी भी यह समस्या है, हालांकि main.js फ़ाइल का डोमेन टेम्पलेट्स जैसा ही है। अंडरस्कोर-टीपीएल टेम्पलेट प्लगइन के साथ संयोजन हो सकता है – mix3d

15

documentation of the text plugin समाधान को संकेत देता है: प्लगइन को इस तरह से कॉन्फ़िगर करना संभव है कि यह हमेशा .js प्रत्यय को जोड़ने और स्क्रिप्ट टैग के माध्यम से लोड किए बिना एक्सएचआर के माध्यम से दूरस्थ संसाधन प्राप्त करता है।

requirejs.config({ 
    config: { 
     text: { 
     useXhr: function (url, protocol, hostname, port) { 
      return true; 
     } 
     } 
    } 
}); 

नोट दूरस्थ सर्वर सही CORS हेडर स्थापित करने के लिए की जरूरत है और यह एक सुरक्षा मुद्दा हो सकता है कि कि: सरल उपाय हमेशा एक्सएचआर का उपयोग कर लागू करने के लिए है। इस प्रकार true को वापस करने के बजाय इसका उपयोग करते समय विश्वसनीय यूआरएल के लिए आवश्यक चेक जोड़ें।

0

ऐसी कॉन्फ़िगरेशन वर्तमान पाठ में काम नहीं करता है! लगाना। मेरे समाधान 'पाठ' मॉड्यूल

require(["text"], function (text) 
{ if(location.port == '4502' || location.port == '4503')// AEM env-t 
     text.useXhr = function(){ return true; } 
    require(["loader/widget/WidgetLoader"]); // dependent on HTML templates by text! plugin 
}); 
संबंधित मुद्दे