2012-12-18 19 views
7

Die Plugins bestehen fast immer darauf, vor jQuery geladen zu werden. Und sie sollten dies nicht tun, weil ich die Shimeinstellung verwende.RequireJS funktioniert nicht mit Shim'ed jQuery-Plugins

In meinem main.js ich habe diese Einstellungen:

requirejs.config({ 
    paths: { 
     'jquery': 'https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min', 
     'bootstrap': '../bootstrap/js/bootstrap.min', 
     'select2': 'vendor/select2', 
     'jshashtable': 'vendor/jshashtable-2.1', 
     'jquery.numberformatter': 'vendor/jquery.numberformatter-1.2.3.min', 
     'jq-datepicker': 'vendor/bootstrap-datepicker', 
     'jq-datepicker.da': 'vendor/bootstrap-datepicker.da' 
    }, 

    // Use shim for plugins that does not support ADM 
    shim: { 
     'bootstrap': ['jquery'], 
     'select2': ['jquery'], 
     'jq-datepicker': ['jquery'], 
     'jshashtable': ['jquery'], 
     'jquery.numberformatter': ['jquery', 'jshashtable'] 
    }, 
    enforceDefine: true 
}); 

Später in dieser Datei ich folgende Voraussetzungen erfüllt sein:

// Start the main app logic. 
requirejs(['jquery', 'bootstrap', 'jq-datepicker'], 
function ($) { 

    console.log('Require.JS loaded'); 

    // Init datepickers 
    // Docs: https://github.com/eternicode/bootstrap-datepicker 
    $('.datepicker').datepicker({ 
     format: 'dd/mm/yyyy', 
     language: 'da', 
     keyboardNavigation: false, 
     autoclose: true 
    }); 

}); 

Aber ich bekomme diese Fehlermeldung die ganze Zeit:

Uncaught TypeError: undefined is not a function bootstrap.min.js:6 
(anonymous function) bootstrap.min.js:6 
(anonymous function) 

Und ich kann in meiner Registerkarte Chrome-Netzwerk sehen, dass es vor jQuery geladen wird.

Jetzt habe ich versucht, die enforceDefine: true nach der Suche hier auf stackoverflow, aber ohne Glück. Ich habe versucht, die requirejs.config auf meine HTML-Seite zu verschieben. Und ich habe versucht, jQuery aus einer lokalen Datei zu laden. Alles ohne Glück.

Was fehlt mir?

+0

Ich habe Ihr Beispiel getestet und habe keine Probleme: http://jsfiddle.net/asgoth/tHkHw/Ich entfernte die EnforceDefine und jq-datepicker.da (konnte es nicht finden) – asgoth

Antwort

5

Haben Shim Sie jquery auch?

shim: { 
    jQuery: { 
     exports: 'jquery' 
    }, 
    'bootstrap': { 
     exports : 'jquery' 
    }, 
    'select2': { 
     exports :'jquery' 
    }, 
    ... 
}, 
+0

Ja, ich habe es auch versucht, aber ohne Glück bei Jetzt lade ich nur jQuery außerhalb von RequireJS. –

+1

bootstrap: { deps: ['jQuery'], Exporte: 'jQuery' }, –

+0

Ich habe dieses Problem behoben, aber es ist schon eine Weile her. Sie erhalten das Akzeptieren, da dies in den meisten Fällen die Wahrheit ist. Und Sie haben die meisten Upvotes. –

1

Versuchen:

shim: { 
    'bootstrap': { 
     exports : 'jquery' 
    }, 
    'select2': { 
     exports :'jquery' 
    }, 
    ... 
}, 
+0

Ich habe dies bereits versucht, hat nicht funktioniert :( –

+0

Dies funktionierte nicht für mich entweder :( –

2

Ist es nicht $ möchten Sie exportieren?

shim: { 
     'jquery': { 
      exports: '$' 
     }, 
     'jqueryuitouchpunch': { 
      deps: ['jqueryui'] 
     }, 
} 
0

Einfach sicher, Sie jQuery vor Ihrem Plugin laden, definieren mit:

// Start the main app logic. 
requirejs(['jquery', 'bootstrap'], function ($) { 
    define(['jq-datepicker'], function() { 
     $('.datepicker').datepicker({ 
      format: 'dd/mm/yyyy', 
      language: 'da', 
      keyboardNavigation: false, 
      autoclose: true 
    }); 
    }); 

});