2013-06-10 4 views
5

Jakoś zawsze otrzymują ten błąd:Requirejs: jQuery jest niezdefiniowana

Uncaught ReferenceError: jQuery is not defined

Mam wrażenie, że jQuery (ładowany poprzez CDN) zajmuje więcej czasu, aby załadować (potwierdzone na karcie sieciowej w Chrome). Uruchomiłem to lokalnie na moim komputerze, dlatego połączenie CDN zawsze będzie dłuższe niż biblioteki. Ale czy requirejs nie powinien czekać po załadowaniu jQuery przed załadowaniem innych bibliotek?

Moi 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')); 
     }); 
    }); 

})(); 

Moje 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) { 
       ... 
    }, 

      ... 
    }); 
}); 

Jakieś pomysły?

+0

użycie http: // w adresie URL jQuery podczas uzyskiwania dostępu aplikacja za pośrednictwem chrome z lokalnego. ponieważ chrome dołącza plik: // w twoim url podczas uzyskiwania dostępu, a więc nie ładuje jquery podczas uzyskiwania dostępu z twojego lokalnego. zamiast tego powinieneś zainstalować serwer WWW, aby uzyskać dostęp do swojej aplikacji przez localhost. – Kishore

+0

Próbowałem dodać "http:", ale wciąż ten sam błąd. Plik ładuje się poprawnie bez "http:". –

+0

jaki plik jest błędem "Uncaught ReferenceError: jQuery nie jest zdefiniowany" pochodzący z, czy widzisz to w konsoli? –

Odpowiedz

4

jQuery nie ma żadnych zależności. Należy dodać w zależności od podkładki mutator:

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

Oto oficjalny przykładem jak radzić sobie z zależnością jQuery z podkładką: https://github.com/requirejs/example-jquery-shim#how-its-set-up

+0

Nie naprawia tego, dodając to tylko dodać zależność dla mojego pliku calss.mutators.js prawda? Czy nie ma potrzeby używania jquery jako zależności od wszystkiego? Wymuszenie załadowania go przed cokolwiek innego? –

+4

Wymusi załadowanie jquery przed załadowaniem programu classmutators. Nie określono, które pliki wyrzuciły błąd, więc domyślam się, że to był ten (podając nazwę). I nie, require.js nie powinien używać jquery jako zależności dla wszystkiego, więc musisz dodać zależność ręcznie dla każdego włączenia. – Antoine

+0

Masz rację, dodając jquery w depach dla 'src/app-require' w shim rozwiązanym. Dzięki! –