我目前正在尝试学习BackboneJS以及随之而来的东西,但我无法真正让它发挥作用。 我的问题是,一旦我尝试使用Backbone对象,我就遇到了麻烦。所以我试着记录下这两个,给予。
undefined main.js:23
undefined main.js:24
代码如下。
// RequireJS configuration.
require.config({
paths: {
// Major dependecies.
jquery: 'libs/jquery/jquery-1.8.3.min',
underscore: 'libs/underscore/underscore-min',
backbone: 'libs/backbone/backbone-min',
// Template dir.
templates: '../templates'
},
// Append query string, to avoid browser caching, while in dev.
urlArgs: "bust=" + (new Date()).getTime()
});
// Start application.
require([
'underscore',
'backbone'
// 'router'
], function(_, backbone) {
console.log(backbone);
console.log(_);
// Router.initialize();
});
正如您所看到的,我已尝试在路由器中使用Backbone对象,但未成功。然后我尝试了我的main.js,同样的事情。
答案 0 :(得分:6)
您需要使用require Shim作为Backbone,Underscore不支持AMD开箱即用。
require shim允许您加载非AMD模块(请参阅here)。请注意,exports
对象是将用作模块的对象的名称。
paths: {
// Major dependecies.
jquery: 'libs/jquery/jquery-1.8.3.min',
underscore: 'libs/underscore/underscore-min',
backbone: 'libs/backbone/backbone-min',
// Template dir.
templates: '../templates'
},
shim: {
backbone: {
deps: ["underscore", "jquery"],
exports: "Backbone"
},
underscore: {
exports: "_"
}
}
另一种方法是将脚本直接包含在HTML中。
<script src="libs/jquery/jquery.js"></script>
<script src="libs/underscore/underscore.js"></script>
<script src="libs/backbone/backbone.js"></script>
答案 1 :(得分:2)
就我个人而言,我发现很多更容易让Backbone(以及Underscore和jQuery)脱离Require。您可以通过正常方式加载它们(通过脚本标记),然后在此之后执行所有需要加载,一切都将完美运行。你会有一些全局变量($,_和Backbone),但除此之外,我发现这种方法存在缺点。
或者,你可以浪费大量的时间玩垫片,这样可以将Backbone正确地带到Require-land ......但是如果你不需要那么浪费那个时间?另外,如果你这样做,你必须在每个文件的define调用中包含jQuery / Backbone / Underscore,这有点浪费时间/精力。
答案 2 :(得分:0)
我怀疑你通过require.js引用文件的方式是错误的(或者主干与require不一致)。检查浏览器的开发人员工具,确保您实际上正在下载文件。 “控制台”或“网络”选项卡应指示您是成功获取文件(HTTP代码200),还是找不到它们(HTTP代码404),或者它甚至没有尝试(“网络”中没有行)在所有)。
此外,请尝试将require.js完全从循环中取出,并使用标准<script>
标记将文件直接加载到您的页面上。这样你就知道你的文件和变量按预期工作了。