RequireJs: Utiliser le chargement automatique-deps avec cale
J'ai défini un RequireJs de configuration qui définit les chemins et les cales:
require.config({
//define application bootstrap
deps: ["main"],
//define library shortcuts
paths: {
app: "app"
, jquery: "lib/jquery"
, underscore: "lib/underscore"
, backbone: "lib/backbone"
, bootstrap: "lib/bootstrap"
},
//define library dependencies
shim: {
jquery: {
exports: "$"
},
underscore: {
exports: "_"
},
backbone: {
deps: ["underscore", "jquery"],
exports: "Backbone"
},
bootstrap: {
deps: ['jquery'],
exports: "bootstrap"
},
//main application
app: {
deps: ["backbone"],
exports: "App"
}
}
});
Comme vous le voyez le dernier "shim" déclaration devrait lui permettre d'accéder à la dorsale (et il deps), lorsque je charge l'Application principale (espace de noms).
En réalité, cela ne fonctionne pas:
require(["app"], function($, _, Backbone, App){
app.router = new Backbone.Router.extend({
//routing and route actions
});
});
Ce fait, je me demande, c'est que dans la "colonne vertébrale-boilderplate"-projet, de la colonne vertébrale (et ses deps) sont à la disposition de cette façon:
https://github.com/tbranyen/backbone-boilerplate/blob/master/app/main.js
Le même pas eu à définir ce dans la fonction.
Donc ce que je fais mal?
essayez de supprimer le
Hey, qui fonctionne très bien 🙂 j'ai même pouvez déposer "l'épine dorsale" mot-clé dans le deps-tableau de la définition de la fonction, même si cela ne fonctionne pas dans chaque module... voulez-vous créer une réponse afin que je puisse fermer la question?
Fait, content d'avoir pu aider!
$, _, Backbone
de la require
fonction de l'endroit où vous étendre le routeur. Je pense que les cales de travail de sorte qu'ils ont juste à l'exportation global des valeurs que vous n'avez pas besoin d'ajouter à tous les appelsHey, qui fonctionne très bien 🙂 j'ai même pouvez déposer "l'épine dorsale" mot-clé dans le deps-tableau de la définition de la fonction, même si cela ne fonctionne pas dans chaque module... voulez-vous créer une réponse afin que je puisse fermer la question?
Fait, content d'avoir pu aider!
OriginalL'auteur dev.pus | 2012-07-09
Vous devez vous connecter pour publier un commentaire.
Supprimer la
$, _, Backbone
-paramètres de larequire
fonction de l'endroit où vous étendre le Routeur. Les cales à l'exportation des valeurs globales, donc il n'est pas nécessaire de faire référence à eux dansrequire
oudefine
appels comme vous le faites régulièrement des dépendances.Passant en paramètres les dégâts avec les variables globales et plus probable que les résultats en eux est indéfini.
window.Backbone
directementOriginalL'auteur jakee
De ce que j'ai lu, requirejs passe les arguments fondés sur ce que vous indiquez dans le tableau... Donc votre appel devrait ressembler à ceci:
Ou comme ceci:
Je suis d'accord. l'encapsulation des dépendances est le point de l'ensemble de la DMLA. Vous devriez le faire de cette façon
alors que là, vous avez les variables encapsulé, vous ne sont pas conformes au principe dry. Disons tout d'un coup
app
a plus de dépendances que ceux qui y sont énumérés.ce n'est pas le même travail à mon humble avis. où est la garantie que jquery est chargé avant de le souligner? ou épine dorsale après le trait de soulignement? Eh bien... il n'est PAS garanti, mais il est nécessaire pour être chargé l'un après l'autre
Si vous avez besoin pour être correct, vous pouvez simplement donner de soulignement un dep de jquery, backbone un dep de trait de soulignement et d'application d'un dep de l'épine dorsale via la cale. Si vous appelez de l'app, il vérifiera que les autres libs sont chargés en premier. Appelez simplement: require(['app'], function (App) { ... }); Le reste de l' $ et _ vars devrait être disponible dans le domaine de la fonction.
OriginalL'auteur Mihai Alexandru Bîrsan