dev*_*pus 8 requirejs backbone.js
我定义了一个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"
}
}
});
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,当我加载主应用程序(-namespace)时,最后一个"shim"声明应该能够访问主干(并且它是deps).
实际上这不起作用:
require(["app"], function($, _, Backbone, App){
app.router = new Backbone.Router.extend({
// routing and route actions
});
});
Run Code Online (Sandbox Code Playgroud)
让我疑惑的是,在"backbone-boilderplate"项目中,Backbone(及其deps)可以这样使用:https: //github.com/tbranyen/backbone-boilerplate/blob/master/app/main.js
甚至不必在函数中定义它.
那么我做错了什么?
Mih*_*san 11
根据我的阅读,requirejs根据您在数组中指定的内容传递参数...因此您的调用应如下所示:
require(["app"], function (App) { // less arguments
});
Run Code Online (Sandbox Code Playgroud)
或者像这样:
require(
["jquery", "underscore", "backbone", "app"], // more deps
function ($, _, Backbone, App) {
}
);
Run Code Online (Sandbox Code Playgroud)
$, _, Backbone
从require
扩展路由器的-function中删除-parameters .填充程序导出全局值,因此无需像常规依赖项那样引用它们require
或define
调用它们.
将它们作为参数传递会与全局变量混淆,并且最有可能导致它们未定义.