backbone.js - RequireJs: use auto-carga-deps con calce
(2)
Definí una configuración RequireJs que define rutas y cuñas:
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"
}
}
});
Como puede ver, la última declaración "shim" debería permitirle acceder a la red troncal (y a la última) cuando cargue la aplicación principal (-paso de nombre).
En realidad esto no funciona:
require(["app"], function($, _, Backbone, App){
app.router = new Backbone.Router.extend({
// routing and route actions
});
});
Lo que me hace pensar es que en el proyecto "backbone-boilderplate", Backbone (y sus deps) están disponibles de esta manera: https://github.com/tbranyen/backbone-boilerplate/blob/master/app/main.js
Ni siquiera tuvo que definir esto en la función.
Entonces, ¿qué estoy haciendo mal?
Elimine los parámetros $, _, Backbone
de la función require
en la que extiende el enrutador. Las cuñas exportan valores globales, por lo que no es necesario hacer referencia a ellas en require
o define
llamadas como lo hace para las dependencias normales.
Pasarlos como parámetros complica las variables globales y lo más probable es que no estén definidos.
Por lo que he leído, requirejs pasa argumentos en función de lo que especifique en la matriz ... Por lo tanto, su llamada debería verse así:
require(["app"], function (App) { // less arguments
});
O así:
require(
["jquery", "underscore", "backbone", "app"], // more deps
function ($, _, Backbone, App) {
}
);