2012-12-18 5 views
7

Les plugins insistent presque toujours sur le chargement avant jQuery. Et ils ne devraient pas le faire en raison de mon utilisation du réglage de la cale.RequireJS ne fonctionne pas avec les plugins Shim'ed jQuery

Dans mes main.js j'ai ces paramètres:

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

Plus tard dans ce dossier, je donne les résultats suivants:

// 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 
    }); 

}); 

Mais j'obtenir cette erreur tout le temps:

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

Et je peux voir dans mon onglet Chrome Network qu'il est chargé avant jQuery.

Maintenant, j'ai essayé d'ajouter le enforceDefine: true après avoir regardé ici sur stackoverflow, mais sans chance. J'ai essayé de déplacer le requirejs.config à ma page html. Et j'ai essayé de charger jQuery à partir d'un fichier local. Tous sans chance.

Qu'est-ce qui me manque?

+0

Je l'ai testé votre exemple et ne voit pas de problème: http://jsfiddle.net/asgoth/tHkHw/J'ai enlevé le enforceDefine et jq-datepicker.da (ne pouvait pas le trouver) – asgoth

Répondre

5

Avez-vous Shim jquery aussi?

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

Ouais, j'ai également essayé mais sans succès à En ce moment je charge juste jQuery en dehors de RequireJS –

+1

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

+0

J'ai corrigé ce problème, mais cela fait longtemps. Vous obtenez l'acceptation comme dans la plupart des cas ce serait la vérité. Et vous avez le plus de votes upvotes. –

1

Essayez:

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

J'ai déjà essayé cela, ne fonctionne pas :( –

+0

Cela n'a pas fonctionné pour moi non plus :( –

2

est-il pas $ que vous voulez exporter?

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

juste vous assurer que la charge jQuery avant votre plug-in, à l'aide de définir:

// 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 
    }); 
    }); 

}); 
Questions connexes