Je n'arrive pas à comprendre comment charger Bootstrap via RequireJS. Aucun des exemples que j'ai trouvés n'a fonctionné pour moi.
Voici ma cale:
require.config({
// Sets the js folder as the base directory for all future relative paths
baseUrl: "./js",
urlArgs: "bust=" + (new Date()).getTime(),
waitSeconds: 200,
// 3rd party script alias names (Easier to type "jquery" than "libss/jquery, etc")
// probably a good idea to keep version numbers in the file names for updates checking
paths: {
// Core libsraries
// --------------
"jquery": "libs/jquery",
"underscore": "libs/lodash",
"backbone": "libs/backbone",
"marionette": "libs/backbone.marionette",
// Plugins
// -------
"bootstrap": "libs/plugins/bootstrap",
"text": "libs/plugins/text",
"responsiveSlides": "libs/plugins/responsiveslides.min",
'googlemaps': 'https://maps.googleapis.com/maps/api/js?key=AIzaSyDdqRFLz6trV6FkyjTuEm2k-Q2-MjZOByM&sensor=false',
// Application Folders
// -------------------
"collections": "app/collections",
"models": "app/models",
"routers": "app/routers",
"templates": "app/templates",
"views": "app/views",
"layouts": "app/layouts",
"configs": "app/config"
},
// Sets the configuration for your third party scripts that are not AMD compatible
shim: {
"responsiveSlides": ["jquery"],
"bootstrap": ["jquery"],
"backbone": {
// Depends on underscore/lodash and jQuery
"deps": ["underscore", "jquery"],
// Exports the global window.Backbone object
"exports": "Backbone"
},
"marionette": {
// Depends on underscore/lodash and jQuery
"deps": ["backbone", "underscore", "jquery"],
// Exports the global window.Backbone object
"exports": "Marionette"
},
'googlemaps': { 'exports': 'GoogleMaps' },
// Backbone.validateAll plugin that depends on Backbone
"backbone.validate": ["backbone"]
},
enforceDefine: true
});
et voici comment j'appelle Bootstrap:
define([
"jquery",
"underscore",
"backbone",
"marionette",
"collections/Navigations",
'bootstrap',
],
function($, _, Backbone, Marionette, Navigations, Bootstrap){
L'erreur que j'obtiens est la suivante:
Uncaught Error: No define call for bootstrap
Des idées sur la façon de résoudre ce problème?
J'ai trouvé un exemple de travail ici:
https://github.com/Sudo-cm/requirejs-bootstrap-demo
Je l'ai suivi pour faire fonctionner mon code.
Selon cette démo, en particulier app.js , vous faites simplement un shim pour attraper la dépendance de Bootstrap sur jQuery,
requirejs.config({
// pathsオプションの設定。"module/name": "path"を指定します。拡張子(.js)は指定しません。
paths: {
"jquery": "lib/jquery-1.8.3.min",
"jquery.bootstrap": "lib/bootstrap.min"
},
// shimオプションの設定。モジュール間の依存関係を定義します。
shim: {
"jquery.bootstrap": {
// jQueryに依存するのでpathsで設定した"module/name"を指定します。
deps: ["jquery"]
}
}
});
puis marquez Bootstrap en tant que dépendance de l'application elle-même, afin qu'elle se charge avant app.js
.
// require(["module/name", ...], function(params){ ... });
require(["jquery", "jquery.bootstrap"], function ($) {
$('#myModalButton').show();
});
Enfin, puisque app.js
est le data-main,
<script type="text/javascript" src="./assets/js/require.min.js" data-main="./assets/js/app.js"></script>
Le JS de Bootstrap est garanti de se charger avant tout code d'application.
La bibliothèque d'amorçage ne renvoie aucun objet comme jQuery, Underscore ou Backbone: ce script modifie simplement l'objet jQuery avec l'ajout de nouvelles méthodes. Donc, si vous souhaitez utiliser la bibliothèque Bootstrap, il vous suffit d'ajouter les modules et d'utiliser la méthode jquery comme d'habitude (sans déclarer Bootstrap comme param , car la valeur est undefined
):
define([
"jquery",
"underscore",
"backbone",
"marionette",
"collections/Navigations",
"bootstrap",
],
function($,_,Backbone,Marionette,Navigations){
$("#blabla").modal("show"); //Show a modal using Bootstrap, for instance
});
J'ai trouvé qu'il suffisait d'ajouter ce qui suit à mon appel requirejs.config (pseudocode):
requirejs.config({
...
shim: {
'bootstrap': {
deps: ['jquery']
}
}
});
J'aime utiliser Require.Js COMMANDER plugin, que fait-il? Charge simplement toutes vos bibliothèques dans l'ordre, dans ce cas, vous n'obtiendrez aucune erreur, ohh et bootstrap dépend de jQuery, nous devons donc utiliser shim dans ce cas:
requirejs.config({
baseUrl: "./assets",
paths: {
order: '//requirejs.org/docs/release/1.0.5/minified/order',
jquery: 'http://code.jquery.com/jquery-2.1.0.min',
bootstrap: '//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min'
},
shim: {
'bootstrap': {
deps:['jquery']
}
}
});
require(['order!jquery', 'order!bootstrap'], function($) {
});