backbone.js requirejs

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