我已经定义了一个定义路径和填充程序的RequireJs配置:
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"
}
}
});
正如您所看到的,当我加载主应用程序(-namespace)时,最后一个“shim”声明应该能够访问主干(并且它是deps)。
实际上这不起作用:
require(["app"], function($, _, Backbone, App){
app.router = new Backbone.Router.extend({
// routing and route actions
});
});
让我想知道的是,在“backbone-boilderplate”项目中,Backbone(及其deps)以这种方式可用: https://github.com/tbranyen/backbone-boilerplate/blob/master/app/main.js
甚至不必在函数中定义它。
那么我做错了什么?
答案 0 :(得分:11)
根据我的阅读,requirejs根据你在数组中指定的内容传递参数...因此你的调用应该是这样的:
require(["app"], function (App) { // less arguments
});
或者像这样:
require(
["jquery", "underscore", "backbone", "app"], // more deps
function ($, _, Backbone, App) {
}
);
答案 1 :(得分:5)
从扩展路由器的$, _, Backbone
- 函数中删除require
- 参数。填充程序导出全局值,因此无需像require
或define
调用那样引用它们,就像对常规依赖项一样。
将它们作为参数传递与全局变量混淆,最有可能导致它们未定义。