2013-03-04 6 views
6

मैं अपनी ऐप की ज़रूरतों को केवल मॉड्यूल लोड करने की कोशिश कर रहा एक समस्या से जूझ रहा हूं। मॉड्यूल की वह सूची अलग-अलग होगी, जैसे कि नीचे।RequJS मॉड्यूल लोड के लिए इंतजार नहीं करता है?

इस कोड को एक गतिशील पेज में इनलाइन है:

<script> 
//APPROACH #1 
(function(){ 
    require('js/dashboard/sales').init(123); 
    require('js/dashboard/inventory').init(123); 
    require('js/dashboard/deadlines').init(123); 
    }()); 
</script> 

मुझे यकीन है कि अगर यह संभव या यह करने के लिए, क्योंकि हो है नहीं कर रहा हूँ:

<script data-main="js/main" src="js/require.js"></script> 
<script> 
    //APPROACH #1 
    (function(){ 

    <% foreach(DashBoardItem item in AvailableItems){ %> 
      require('js/dashboard/<%= item.Name.ToLower() %>').init(<%= CurrentUser.ID %>); 
    <% } %> 

    }()); 
</script> 

विचार की तरह कुछ का उत्पादन होता है उपर्युक्त दृष्टिकोण त्रुटि

मॉड्यूल नाम "जेएस/डैशबोर्ड/बिक्री" संदर्भ के लिए अभी तक लोड नहीं किया गया है: _। बजाय इस पैदा उपयोग की आवश्यकता ([])

मैंने कोशिश की:

<script> 
    //APPROACH #2 
    require(['js/dashboard/sales', 'js/dashboard/inventory', 'js/dashboard/deadlines' ], 
      function(sales, inventory, deadlines){ 
       sales.init(123); 
       inventory.init(123); 
       deadlines.init(123); 
      }); 
</script> 

लेकिन यह विफल रहता है क्योंकि जाहिरा तौर पर RequireJS मॉड्यूल लोड करने के लिए और उन तीन कॉलबैक मानकों (sales, inventory के लिए इंतजार नहीं होगा, deadlines) यह निष्पादित होने पर undefined होगा।

क्या मैं इस बारे में पूरी तरह गलत हूं? मैं सर्वर पक्ष से क्लाइंट जेएस तक आवश्यक मॉड्यूल की एक अलग सूची कैसे पास कर सकता हूं?

अद्यतन - निर्धारित

मेरे समस्या यह है कि मेरी मॉड्यूल (बिक्री, सूची, समय सीमा) गलत तरीके से घोषित किया गया था। @anoopelias की टिप्पणी के लिए धन्यवाद, मुझे एहसास हुआ कि मैंने define(...) के बजाय require(...) का उपयोग किया था। तो वे की तरह थे:

//example of WRONG sales.js module 
require(['jquery', 'other-module'], function($, otherModule){ 
    //do stuff, return some object instance 
}); 

एक बार मैं नीचे की तरह तय की है, मैं ऊपर से इस्तेमाल कर सकते हैं दृष्टिकोण # 2 और यह ठीक काम किया।

//example of correct sales.js module 
define(['jquery', 'other-module'], function($, otherModule){ 
    //do stuff, return some object instance 
}); 
+1

आपका दूसरा दृष्टिकोण ठीक लगता है। क्या आपने उन सभी तीन मॉड्यूल में ऑब्जेक्ट को सही ढंग से वापस करने के लिए 'परिभाषित' किया है? – anoopelias

+0

@anoopelias परिभाषा को किसी ऑब्जेक्ट को वापस करने की आवश्यकता नहीं है, लेकिन मॉड्यूल के काम करने के लिए, इसे परिभाषित करने की आवश्यकता है। (देखें [यहां] (http://requirejs.org/docs/api.html#funcmodule)) – Jlange

+0

@anoopelias, आप सही हैं। मैं अभी भी इन चीजों को यहां और वहां भ्रमित कर रहा हूं। एक बार जब मैंने उन डैशबोर्ड मॉड्यूल घोषणाओं में से प्रत्येक में 'आवश्यकता' के बजाय 'परिभाषित' का उपयोग किया, तो दूसरा दृष्टिकोण काम करता था। धन्यवाद। – sergiopereira

उत्तर

0

सिर्फ रिकार्ड के लिए, # 1 दृष्टिकोण के लिए आप बस भूल गया [] मॉड्यूल के आसपास:

<% foreach(DashBoardItem item in AvailableItems){ %> 
     require(['js/dashboard/<%= item.Name.ToLower() %>']).init(<%= CurrentUser.ID %>); 
<% } %> 

जब तक आपके js/मुख्य इस मॉड्यूल की आवश्यकता नहीं है, requirejs शिकायत करेंगे। यहां तक ​​कि यदि आप उन्हें अपने जेएस/मुख्य में शामिल करते हैं तो आपको लोड करने के लिए मुख्य होने के लिए "प्रतीक्षा" करना होगा (इसलिए जेएस/मुख्य के लिए कॉल की आवश्यकता में फोरच घोंसला)

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