2009-01-21 15 views
11

मुझे एक चिकन & अंडा समस्या की तरह लगता है, और जो मुझे लगता है वह एक तार्किक समाधान है। हालांकि, यह मेरे लिए हुआ कि दूसरों को कुछ ऐसा ही सामना करना पड़ेगा, इसलिए मैंने सोचा कि मैं इसे जनता के लिए बाहर निकाल दूंगा।दोजो एडऑनलोड, लेकिन क्या डोजो लोड हो गया है?

स्थिति यह है कि मैं डोजो के एडऑनलोड फ़ंक्शन का उपयोग कई कॉलबैक को कतार में करना चाहता हूं जिसे डीओएम ने क्लाइंट साइड पर प्रतिपादन पूरा करने के बाद निष्पादित किया जाना चाहिए। तो क्या मैं कर रहा हूँ इस प्रकार है:

<html> 
    <head> 
     <script type="text/javascript" src="dojo.xd.js"></script> 
     ... 
    </head> 
    <body> 
     ... 
     <script type="text/javascript"> 
      dojo.addOnLoad(...); 
      dojo.addOnLoad(...); 
      ... 
     </script> 
    </body> 
</html> 

अब, मुद्दा यह है कि मैं dojo.addOnLoad बुला किए जाने से पहले पूरे डोजो पुस्तकालय ब्राउज़र डाउनलोड किया गया है प्रतीत होता है। यह एक तरह से समझ में आता है, क्योंकि इनलाइन एससीआरआईपीटी सामग्री को से पहले निष्पादित किया जाना चाहिए, पूरा डोम लोड हो गया है (और सामान्य बॉडी ऑनलोड कॉलबैक ट्रिगर किया गया है)।

मेरा प्रश्न यह है - मेरा दृष्टिकोण ध्वनि है, या यह एक सामान्य/मानक बॉडी ऑनलोड जावास्क्रिप्ट कॉलबैक को एक फ़ंक्शन कॉल करने के लिए अधिक समझदारी देगा, जो वही काम करता है जो प्रत्येक dojo.addOnLoads में कर रहा है एससीआरआईपीटी ब्लॉक। बेशक, यह सवाल पूछता है, यदि आप कभी गारंटी नहीं देते हैं कि लाइब्रेरी का उपयोग करने से पहले Dojo लाइब्रेरी लोड की जाएगी तो आप dojo.addOnLoad का उपयोग क्यों करेंगे?

उम्मीद है कि यह स्थिति मेरे अलावा किसी अन्य व्यक्ति को समझ में आती है। ऐसा लगता है कि किसी और को इस स्थिति का सामना करना पड़ सकता है।

विचार?

शुभकामनाओं सहित, एडम चावल

उत्तर

12

आप इसे सही ढंग से कर रहे हैं। बाहरी जावास्क्रिप्ट फ़ाइलों को क्रमशः लोड और निष्पादित किया जाता है, इसलिए जब तक यह आपके dojo.addOnLoad(...); तक पहुंच जाता है तो डोजो लोड हो जाता है। dojo.addOnLoad बजाय window.onload का प्रयोग दो कारणों के लिए:

  • यह पहले आग, क्योंकि यह इस्तेमाल DOMContentLoaded
  • यह निष्पादन स्थगित जब तक सभी आवश्यक स्क्रिप्ट

समझाया पढ़ लिए गए हैं द्वारा dojo.require के अतुल्यकालिक लोड हो रहा है संभालती है DojoCampus में (dojo.addOnLoad):

dojo.addOnLoad af Dojo का उपयोग करने के लिए अवांछित पहलू । फ़ंक्शन addOnLoad को पास करने से कार्य को पर चलाया जाएगा जब डोम तैयार हो। यह दस्तावेज़ से थोड़ा अलग है। पहले से और body.onload उस addOnLoad सभी dojo.require() (और उनकी रिकर्सिव निर्भरताओं) तक प्रतीक्षा करता है) फायरिंग से पहले लोड किया गया है।

-5

इसमें आपकी समस्या से कोई लेना-देना नहीं हो सकता है, लेकिन केवल एक मामला था जहां मेरे समान लक्षण थे। मेरे लिए सबकुछ फ़ायरफ़ॉक्स, क्रोम इत्यादि के लिए ठीक काम करता है, लेकिन आईई 8 नहीं।

मुझे ऐसा लगता था कि डोजो लोड नहीं हो रहा था, आईई 8 में एक त्रुटि यह कह रही थी कि डोजो अनिर्धारित था (लेकिन हर समय नहीं) और मैं सबकुछ स्टाइल शीट्स में डाल सकता हूं और डोजो आयात कर सकता हूं और फिर भी त्रुटि प्राप्त कर सकता हूं।

मैं स्थानीय Google ऐप इंजन विकास सर्वर चला रहा था। यह Pythons SimpleHTTPServer पर आधारित दिखता है जो बदले में सॉकेटसेवर.बेससेवर का उपयोग करता है। इसमें BaseServer.request_queue_size है जो 5 तक डिफ़ॉल्ट है - मुझे ऐप इंजन में कुछ भी नहीं मिला जो इस मान को ओवरराइड करता है, इसलिए मुझे लगता है कि विकास Google ऐप इंजन सर्वर की 5 कनेक्शन की ऊपरी सीमा है।

regedit का उपयोग करना और HKEY_CURRENT_USER \ Software \ Microsoft \ Windows के लिए \ CurrentVersion \ Internet सेटिंग्स

"MaxConnectionsPerServer" = DWORD जा रहा: 00,000,010 "MaxConnectionsPer1_0Server" = DWORD: 0000010

इससे पता चलता है कि IE जा रहा था कोशिश करने और 10 एक साथ कनेक्शन खोलने के लिए। मैंने इन दो चाबियों को संपादित किया और उन्हें 2 बनाया और कंप्यूटर को पुनरारंभ किया, समस्या दूर हो गई।

+0

यहां अप्रासंगिक। –

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