2013-06-17 10 views
8

असल में, विचार यह है कि "उप" मॉड्यूल एक ऑब्जेक्ट बनाता है, और वह ऑब्जेक्ट एक यूटिलिटी लाइब्रेरी का हिस्सा होना चाहिए जो "मुख्य" मॉड्यूल है। हालांकि, "उप" वस्तु "मुख्य" से उपयोगिताओं पर निर्भर करता है:Requ.js में परिपत्र निर्भरता को कैसे हल करें?

// Main module 
define(['sub'], function(sub) { 
    var utils = { 
     utilityMain: function() { 
      // ... 
     }; 
     // ... 
    }; 

    tools.subModule = sub; 

    return tools; 
}); 

// Sub module 
define(['main'], function(main) { 
    return new (function() { 

     // Singleton object using functions in main module 
     var somestuff = function() { 
      main.utilityMain(); 
      // etc 
     }; 
    })(); 
}); 

मैं कैसे एक ब्लैक होल है कि पूरे ग्रह को निगल जाएगा बनाए बिना require.js साथ इस लक्ष्य को हासिल कर सकते हैं?

बहुत बहुत धन्यवाद।

उत्तर

6

वहाँ the docs में सुझाव के लिए कुछ चीजें हैं:

ba बाद में प्राप्त कर सके बाद मॉड्यूल require() विधि का उपयोग कर परिभाषित किया गया है (एक निर्भरता के रूप में की आवश्यकता होती है निर्दिष्ट करने के लिए तो सही संदर्भ के लिए प्रयोग किया जाता है सुनिश्चित हो देखो a)

जैसे:

// Sub module 
define(['require'], function(require) { 
    return new (function() { 

     // Singleton object using functions in main module 
     var somestuff = function() { 
      require('main').utilityMain(); 
      // etc 
     }; 
    })(); 
}); 

या

आप के बजाय exports इस्तेमाल कर सकते हैं मॉड्यूल है कि तुरंत अन्य मॉड्यूल द्वारा संदर्भ के लिए उपलब्ध है के लिए एक खाली वस्तु बनाने के लिए

जैसे:

// Main module 
define(['sub', 'exports'], function(sub, exports) { 
    exports.utilityMain: function() { 
     // ... 
    }; 

    exports.subModule = sub.sub; 
}); 
// Sub module 
define(['main', 'exports'], function(main, exports) { 
    exports.sub = new (function() { 

     // Singleton object using functions in main module 
     var somestuff = function() { 
      main.utilityMain(); 
      // etc 
     }; 
    })(); 
}); 

और

परिपत्र निर्भरता दुर्लभ हैं, और usuall y एक संकेत है कि आप डिज़ाइन पर पुनर्विचार करना चाहते हैं

+0

"डिज़ाइन पर पुनर्विचार करें", मैं पूरी तरह से सहमत हूं लेकिन इस समय इसके लिए थोड़ा कड़ा है। मैंने पहले से ही शोध किया है और आप जो प्रस्तावित कर रहे हैं उसमें देखा है ... मैं पिछले दो दिनों से 'निर्यात' ऑब्जेक्ट के आस-पास अपना सिर लपेटने की कोशिश कर रहा हूं, और अब आप मुझे बता रहे हैं कि यह उपलब्ध है * तुरंत *? मैंने सोचा कि फैक्ट्री फ़ंक्शन निष्पादन को फिर से शुरू करने के बाद ही 'निर्यात' को 'परिभाषित' /' आवश्यकता 'पर वापस कर दिया जाएगा? एक दूसरे रूप में, ऐसा लगता है कि आप सुझाव दे रहे हैं कि 'मुख्य' फिर से शुरू होने के बाद 'मुख्य' को निष्पादन फिर से शुरू करना चाहिए? – pilau

+0

मैं वास्तव में इसकी सराहना करता हूं अगर आप वास्तव में आदेश दे सकते हैं जिसमें ये सब कुछ होता है। मुझे लगता है कि यह वह जगह है जहां मैं समझने में असफल रहा कि यह कामकाज मेरी समस्या को हल करता है। धन्यवाद! – pilau

+1

'निर्यात' का उपयोग करके प्रत्येक मॉड्यूल को प्रत्येक मॉड्यूल के लिए 'अपरिभाषित' के बजाय कुछ ऑब्जेक्ट का संदर्भ देने की अनुमति देता है। आप या तो मॉड्यूल के _functions_ का उपयोग नहीं कर सकते हैं, लेकिन आप यह सुनिश्चित कर सकते हैं कि संदर्भ रनटाइम पर ठीक से सेट किए जाएंगे। समांतर में चल रही मॉड्यूल परिभाषाओं दोनों के बारे में सोचें। वे दोनों जानते हैं कि अन्य मॉड्यूल के लिए _look_ कहां है, लेकिन जब तक वे दोनों पूर्ण नहीं होते हैं तब तक न तो बातचीत कर सकते हैं। – freejosh

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