2013-06-10 20 views
5

qualche modo ho sempre ricevere questo errore:Requirejs: jQuery è indefinito

Uncaught ReferenceError: jQuery is not defined

Ho l'impressione che jQuery (caricata tramite CDN) richiede più tempo per caricare (confermata dalla scheda di rete su Chrome). Lo faccio localmente sul mio PC, ecco perché la chiamata CDN sarà sempre più lunga delle librerie. Ma non è richiesto requirejs che aspetti dopo il caricamento di jQuery prima di caricare le altre librerie?

miei boot.js:

(function(){ 
    requirejs.config({ 
     baseUrl: '/assets/js/', 
     paths: { 
      'lib': 'lib/', 
      'src': 'src/', 
      'jquery': [ 
       '//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min', 
       'lib/jquery-1.9.1.min' 
      ], 
      'mootools': 'lib/mootools-core-1.4.5', 
      'class.mutators': 'lib/Class.Mutators.jQuery' 
      //'order': 'assets/js/lib/order', 
     }, 
     shim: { 
      'class.mutators': { 
       deps: [ 
        'mootools' 
       ], 
       exports: 'classmutators' 
      }, 
      'underscore': { 
        exports: '_' 
      } 
     }, 
     waitSeconds: 15 
    }); 

    requirejs([ 
     'jquery', 
     'src/app-require' 
    ], function($){ 
     $(document).ready(function(){ 
      var App = new $.App($('body')); 
     }); 
    }); 

})(); 

mie app-require.js:

define([ 
    'mootools', 
    'class.mutators', 
    'src/Tracker', 
    'lib/jquery.easing.1.3', 
    'lib/nivo/jquery.nivo.slider.pack', 
    'lib/isotope/jquery.isotope.min', 
    'lib/waypoints.min' 
], function() { 

var className = 'App'; 
//-- 
return $[className] = new Class({ 
    jQuery: className, 

    Implements: [Options, Events], 

    options: {}, 

    //-- init 
    //--------------------------------------------- 
    initialize: function(el, options) { 
       ... 
    }, 

      ... 
    }); 
}); 

Tutte le idee?

+0

uso http: // nell'URL jQuery quando si accede l'app tramite Chrome dal locale. perché chrome aggiunge il file: // nel tuo url quando accedi quindi non carica jquery quando accedi dal tuo locale. invece dovresti installare un webserver per accedere alla tua app attraverso localhost – Kishore

+0

Ho provato ad aggiungere "http:" ma ho comunque lo stesso errore. Il file si sta caricando bene anche senza "http:". –

+0

quale file è l'errore 'Uncaught ReferenceError: jQuery is not defined' originato da, puoi vederlo nella tua console? –

risposta

4

jQuery non ha alcuna dipendenza. Si dovrebbe aggiungere nelle dipendenze shim di mutatore:

shim: { 
      'class.mutators': { 
       deps: [ 
        'jquery', 
        'mootools' 
       ], 
       exports: 'classmutators' 
      }, 
      'underscore': { 
        exports: '_' 
      } 
     }, 

Ecco l'esempio ufficiale di come gestire una dipendenza jQuery con spessore: https://github.com/requirejs/example-jquery-shim#how-its-set-up

+0

Non risolve il problema, aggiungendo solo aggiungere una dipendenza per il mio file calss.mutators.js giusto? Non è richiesto l'uso di jQuery come dipendenza per tutto? Costringendolo a caricare prima di ogni altra cosa? –

+4

Forza il caricamento di jquery prima di caricare i classmutators. Non hai specificato quali file hanno generato l'errore, quindi ho pensato che fosse questo (dato il nome). E no, require.js non dovrebbe usare jquery come dipendenza per tutto, quindi devi aggiungere manualmente la dipendenza per ogni inclusione. – Antoine

+0

Hai ragione, l'aggiunta di jquery nei deps per "src/app-require" nello shim lo ha risolto. Grazie! –