RequJS

2012-09-05 12 views
5

का उपयोग कर जावास्क्रिप्ट में एएमडी कार्यान्वित करना मैं RequJS के लिए बिल्कुल नया हूं इसलिए मैं अभी भी इसके आसपास अपना रास्ता ढूंढने की कोशिश कर रहा हूं। मेरे पास एक प्रोजेक्ट था जो पूरी तरह से ठीक काम कर रहा था, फिर मैंने RequJS का उपयोग करने का फैसला किया, इसलिए मैंने इसे गड़बड़ कर दिया :)RequJS

इस तरह से, मेरे पास RequJS के बारे में कुछ प्रश्न हैं और यह सब कुछ कैसे पता लगाता है।

enter image description here

मैं अपने _Layout.cshtml फाइल के अंदर निम्न पंक्ति है:

<script data-main="@Url.Content("~/Scripts/bootstrap.js")" src="@Url.Content("~/Scripts/require-2.0.6.js")" type="text/javascript"></script> 

और यहाँ मेरी bootstrap.js फ़ाइल है:

require.config({ 
    shim: { 
     'jQuery': { 
      exports: 'jQuery' 
     }, 
     'Knockout': { 
      exports: 'ko' 
     }, 
     'Sammy': { 
      exports: 'Sammy' 
     }, 
     'MD': { 
      exports: 'MD' 
     } 
    }, 
    paths: { 
     'jQuery': 'jquery-1.8.1.min.js', 
     'Knockout': 'knockout-2.1.0.js', 
     'Sammy': 'sammy/sammy.js', 
     'MD': 'metro/md.core.js', 
     'pubsub': 'utils/jquery.pubsub.js', 
     'waitHandle': 'utils/bsynchro.jquery.utils.js', 
     'viewModelBase': 'app/metro.core.js', 
     'bindingHandlers': 'app/bindingHandlers.js', 
     'groupingViewModel': 'app/grouping-page.js', 
     'pagingViewModel': 'app/paging-page.js' 
    } 
}); 

require(['viewModelBase', 'bindingHandlers', 'Knockout', 'jQuery', 'waitHandle', 'MD'], function (ViewModelBase, BindingHandlers, ko, $, waitHandle, MD) { 
    BindingHandlers.init(); 

    $(window).resize(function() { 
     waitHandle.waitForFinalEvent(function() { 
      MD.UI.recalculateAll(); 
     }, 500, "WINDOW_RESIZING"); 
    }); 

    var viewModelBase = Object.create(ViewModelBase); 
    ko.applyBindings(viewModelBase); 
    viewModelBase.initialize(); 
}); 

    require(['viewModelBase', 'bindingHandlers', 'Knockout'], function (ViewModelBase, BindingHandlers, ko) { 
     BindingHandlers.init(); 

     var viewModelBase = new ViewModelBase(); 
     ko.applyBindings(viewModelBase); 
     viewModelBase.initialize(); 
    }); 
मैं स्क्रिप्ट फ़ोल्डर के अंदर फ़ाइल पदानुक्रम है

फिर मैंने define फ़ंक्शन का उपयोग कर अपने मॉड्यूल को लागू किया।

define(['jQuery'], function ($) { 
    var 
     publish = function(eventName) { 
      //implementation 
     }, 
     subscribe = function(eventName, fn) { 
      //implementation 
     } 
    return { 
     publish: publish, 
     subscribe: subscribe 
    } 
}); 

मैं मूल रूप से मेरी जावास्क्रिप्ट फ़ाइलों के सभी के लिए एक ही बात कर लेते हैं: एक उदाहरण pubsub मॉड्यूल है। ध्यान दें कि /Scripts/utils फ़ोल्डर के अंदर पबब मॉड्यूल वाली वास्तविक फ़ाइल jquery.pubsub.js है। यह अन्य मॉड्यूल के साथ भी मामला है।

अद्यतन:

ठीक है मैं अपने बूटस्ट्रैप फ़ाइल अब अद्यतन मैं मैं समझता हूँ कि क्या एक परत है लगता है और कारण है कि मैं इसे का उपयोग किया जाना चाहिए। लेकिन यह अभी भी मेरे लिए काम नहीं कर रहा है, हालांकि मैंने उन सभी मार्गों को भी घोषित कर दिया है जो मुझे लगता है कि उन्हें सही होने में मुझे परेशानी होगी। बात यह है कि यह बूटस्ट्रैप फ़ाइल के अंदर मेरे require कॉलबैक में भी नहीं जा रहा है, इसलिए मुझे लगता है कि मुझे अभी भी एक समस्या है जिस तरह से मैं अपने मॉड्यूल को कॉन्फ़िगर या परिभाषित कर रहा हूं?

उत्तर

1

ठीक है, एक के लिए, यदि आप एक गैर-एमडीडी लाइब्रेरी का उपयोग करने जा रहे हैं, तो jQuery के साथ, jQuery आवश्यकता को कॉलबैक में पास कर दिया गया है, आपको अपनी आवश्यकता कॉन्फ़िगरेशन में निर्यात के साथ एक शिम निर्दिष्ट करने की आवश्यकता है, जैसे इसलिए:

require.config({ 
    shim: { 
     jQuery: { 
      exports: '$' 
     } 
    }, 
    paths: { 
     jQuery: 'jquery-1.8.1.min.js', 
    } 
}); 

इसके अलावा मुझे यकीन नहीं है कि मैं समझता हूं कि आपकी समस्या वास्तव में क्या है।

+0

रयान, आपके उत्तर के लिए धन्यवाद। मेरी समस्या यह है कि RequJS निर्भरता को सही ढंग से हल नहीं कर रहा है। उदाहरण के लिए, कंसोल में दिखाई देने वाली पहली त्रुटि पबूब मॉड्यूल में "jQuery परिभाषित नहीं है" है। – Kassem

+0

आपकी निर्देशिका संरचना में '_Layout.cshtml' फ़ाइल कहां है? –

+1

ठीक है मैंने इस बारे में और अधिक पढ़ा है कि एक शिम क्या है और उन्हें कैसे कॉन्फ़िगर करना है और यह सब कुछ है लेकिन मैं अभी भी इसे काम नहीं कर सका। मैंने अपनी पोस्ट अपडेट की है। मैं अभी भी क्या गलत कर रहा हूँ? धन्यवाद। – Kassem

0

आप ASP.NET MVC RequireJS for .NET

पर एक नज़र डालें उपयोग कर रहे हैं नेट परियोजना के लिए RequireJS सुचारू रूप से xml विन्यास फाइल, कार्रवाई फिल्टर विशेषताओं का उपयोग सर्वर साइड पर ASP.NET MVC के साथ RequireJS ढांचे एकीकृत करता है, विरासत और सहायक कक्षाओं के लिए एक आधार नियंत्रक।

+0

दिलचस्प लगता है! लेकिन मैं समझता हूं कि यह चीज़ अन्य लोगों के पुस्तकालयों का उपयोग शुरू करने से पहले कैसे काम करती है, लेकिन वैसे भी धन्यवाद :) वैसे, मैंने उपरोक्त पोस्ट को अपडेट किया है, क्या आप कृपया एक नज़र डालेंगे? – Kassem

0

मुझे पूरी तरह से समझ में नहीं आया कि समस्या क्या है। लेकिन अगर यह जे एस पुस्तकालयों से संबंधित है require.js से भरा हुआ तो यह बूट फ़ाइल मेरे लिए काम करता है:

require.config({ 
    paths: { 
     "jquery": "/scripts/jquery-1.8.2", 
     "sammy": "/scripts/sammy-0.7.1" 
    }, 
    shim: { 
     "sammy": { 
      deps: ["jquery"], 
      exports: "Sammy" 
     } 
    } 
}); 

require(["jquery", "sammy"], function ($) { 
    $(document).ready(function() { 
     alert("DOM ready"); 
    }); 
}); 

कृपया, ध्यान दें, वहाँ रास्तों में कोई '.js'।

बीटीडब्ल्यू, यदि आप एमवीसी 4 का उपयोग करते हैं, तो आपको @ href 'और' src 'में अब @ url.Content की आवश्यकता नहीं है।