2012-07-13 10 views
5

मैं पिछले कुछ दिनों में Requ.JS और सिग्नलआर के साथ काम कर रहा हूं और मैंने देखा कि जब मैं अपनी साइट लोड करता हूं तो कभी-कभी मेरी आवश्यकता के बावजूद jquery से पहले सिग्नलआर/हब्स लोड हो जाते हैं। Js कॉन्फ़िगरेशन प्रकट होता है सही होना।Requ.js + सिग्नलआर

यहाँ मेरी config है:

require.config({ 
    paths: { 
     jQuery: 'libs/jquery/jquery', 
     Underscore: 'libs/underscore/underscore', 
     Backbone: 'libs/backbone/backbone', 
     Marionette: 'libs/backbone/backbone.marionette' 
    } 
}); 

require([ 
     'app', 
     'order!libs/jquery/jquery-min', 
     'order!libs/jQueryUI/jquery-ui-1.8.11.min', 
     'order!libs/jqGrid/grid.locale-en', 
     'order!libs/jqGrid/jquery.jqGrid.min', 
     'order!libs/underscore/underscore-min', 
     'order!libs/backbone/backbone-min', 
     'order!Marionette', 
     'order!libs/jquery.signalR-0.5.1', 
     'order!noext!signalr/hubs' 
    ], function (app) { 
     app.initialize();   
    }); 

जब यह विफल रहता है के केन्द्रों फाइल मैं लाइन 16 पर एक त्रुटि प्राप्त। यह uncaught TypeError: Cannot read property 'signalR' of undefined कहता है।

वी 2 में अपग्रेड किया गया और मेरी कॉन्फ़िगरेशन संशोधित की गई।

var fRequire = require.config({ 
    paths: { 
     jQuery: 'libs/jquery/jquery', 
     Underscore: 'libs/underscore/underscore', 
     Backbone: 'libs/backbone/backbone', 
     Marionette: 'libs/backbone/backbone.marionette', 
     sigr: 'libs/jquery.signalR-0.5.1' 
    }, 
    shims: {   
     "libs/jquery.signalR-0.5.1": { 
      deps: ["jQuery"] 
     }, 
     "libs/jqGrid/jquery.jqGrid.min": { 
      deps: ["jQuery"] 
     }, 
     "libs/jquery/jquery-ui-1.8.19.min": { 
      deps: ["jQuery"] 
     }, 
     "libs/jqGrid/grid.locale-en": { 
      deps: ["jQuery"] 
     }, 
     "noext!signalr/hubs": { 
      deps: ["sigr"] 
     } 
    } 
}); 

fRequire([ 
    'app' 
], function (app) { 
    app.initialize(); 
}); 

अब आवश्यकता jQuery के लिए गलत स्थानों में लग रही है, अंडरस्कोर, आदि ... के बावजूद मेरी यह कह विशेष रूप से जहां देखने के लिए। जब मैंने कॉन्फ़िगर किया है तो v1 का उपयोग करने के लिए कॉन्फ़िगर किए जाने पर शायद मेरे पास पुराने ट्यूटोरियल के बाद मेरे साथ कुछ करना है।

http://backbonetutorials.com/organizing-backbone-using-modules/

अंतिम अद्यतन:

यहाँ मेरे कार्य config है। उम्मीद है कि यह इस मुद्दे को पारित करने जैसे किसी भी नए शौक की मदद करेगा।

require.config({ 
    baseUrl: '/js', 
    paths: { 
     "jquery": 'libs/jquery/jquery-min', 
     "underscore": 'libs/underscore/underscore-min', 
     "backbone": 'libs/backbone/backbone-min', 
     "marionette": 'libs/backbone/backbone.marionette', 
     "sigr": 'libs/jquery.signalR-0.5.1' 
    }, 
    shims: { 
     "backbone": { 
      deps: ["underscore", "jquery"], 
      exports: "Backbone" 
     }, 
     "underscore": { 
      deps: ["jquery"] 
     }, 
     "marionette": { 
      deps: ["backbone", "jquery"] 
     }, 
     "sigr": { 
      deps: ["jquery"] 
     }, 
     "libs/jqGrid/jquery.jqGrid.min": { 
      deps: ["jquery"] 
     }, 
     "libs/jquery/jquery-ui-1.8.19.min": { 
      deps: ["jquery"] 
     }, 
     "libs/jqGrid/grid.locale-en": { 
      deps: ["jquery"] 
     }, 
     "noext!signalr/hubs": { 
      deps: ["sigr"] 
     } 
    } 
}); 

// for future ref, I loaded jquery here because app.js references sigr which requires it. 
// without enabling it before the module is loaded sigr would complain jquery was not enabled. 
require([ 
    'libs/domReady', 
    'app', 
    'jquery' 
], function (domReady, app, $) { 
    domReady(function() { 
     app.initialize(); 
    }); 
}); 

यह अनिवार्य था कि मैं समारोह (domready, एप्लिकेशन, $) में jQuery लोड। ऐसा करने में विफल होने के परिणामस्वरूप सिग्नलर रिपोर्टिंग होगी कि यह नहीं मिल सका।

उत्तर

4

यदि आप requjs 2.x का उपयोग कर रहे हैं तो आप "shims" कॉन्फ़िगरेशन विशेषता का उपयोग कर सकते हैं। वहाँ आप ..

फ़ाइलों को शिकायत AMD नहीं कर रहे हैं, jQuery, jQueryUI, आदि जैसे के बीच निर्भरता निर्दिष्ट कर सकते हैं उदाहरण के रूप में आपके विन्यास का उपयोग करना:

require.config({ 
    paths: { 
     jQuery: 'libs/jquery/jquery', 
     Underscore: 'libs/underscore/underscore', 
     Backbone: 'libs/backbone/backbone', 
     Marionette: 'libs/backbone/backbone.marionette' 
    }, 
    // specify depedencies 
    shim: { 
     "libs/jquery.signalR-0.5.1" : { 
      deps: ["jQuery"] 
     }, 
     "libs/jqGrid/jquery.jqGrid.min" : { 
      deps: ["jQuery"] 
     } 
    } 
}); 

इसके अलावा, "शिम्स" में निर्भरता कॉन्फ़िगर समाप्त "ऑर्डर!" का उपयोग लगाना।

युक्ति: उपयोग "पथ" API जो आपके सिस्टम उपयोग करते हैं, तो जब कि एपीआई का एक नया संस्करण जारी किया गया है तुम सिर्फ में "पथ" को बदल सकते हैं के लिए एक दोस्ताना नाम सेट करने और बस हो गया।

+0

इसे "शिम्स" के बजाय "शिम" कहना चाहिए। – Sean

1

प्रदान किए गए उत्तर पर बस पालन करने के लिए और आप अभी भी jQuery को पूर्व-शामिल क्यों कर रहे हैं ... आवश्यकता के लिए कॉन्फ़िगरेशन सेटिंग "shim" है, न कि "shims"। आवश्यकता कॉन्फ़िगरेशन सेटिंग की सही वर्तनी के बिना निर्दिष्ट निर्भरताओं को पहचान और प्रीलोड नहीं करेगा। मैंने हाल ही में इस पर हमला किया और इसके बारे में पोस्ट किया: http://mikeycooper.blogspot.com/2013/01/requirejs-20-dependencies-seemingly.html

+0

यह जानकारी का एक प्रमुख टुकड़ा था। मैं भी "shims" नहीं "शिम" का उपयोग करके काटा गया था। इस पर ध्यान देने के लिए धन्यवाद! –

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

  • कोई संबंधित समस्या नहीं^_^