我想用Require.js创建Backbone.js应用程序。 但我在控制台中出错: 未捕获错误:尚未为上下文加载模块名称“下划线”:_。使用require([])
require.config({
baseUrl: 'js/',
paths : {
'jquery' : 'jquery',
'underscore' : 'underscore',
'backbone' : 'backbone',
shim: {
'underscore': {
exports: '_'
},
'backbone': {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
}
}
}
});
define('app', ['jquery','backbone', 'underscore'], function ($, Backbone, _){
var Model = Backbone.model.extend({});
var model = new Model;
});
require(['app','jquery', 'backbone', 'underscore']);
我如何解决这个问题?
答案 0 :(得分:1)
在路径对象中提到了垫片。我不确定这是不是问题,但是想在这里提一下。
答案 1 :(得分:1)
您仍需要将underscore
列为paths
的一部分,以便在填充程序中引用它。此外,不确定您的目录结构是什么样的,但我是在假设库代码位于/js/libs
目录中的情况下编写的。最后,请注意,您不需要require
app
的任何依赖关系 - RequireJS的乐趣在于它会找出要加载的内容。
因此...
require.config({
baseUrl: 'js/',
paths : {
'jquery' : 'lib/jquery',
'underscore' : 'lib/underscore',
'backbone' : 'lib/backbone',
},
shim: {
'underscore': {
exports: '_'
},
'backbone': {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
}
}
});
define('app', ['jquery','backbone', 'underscore'], function ($, Backbone, _){
var Model = Backbone.Model.extend({});
var model = new Model({
foo: 'bar'
});
var app = {
model: model
};
// ...
return app;
});
require(['app'], function(App) {
App.model.get('foo'); // <<=== returns 'bar'
});
答案 2 :(得分:-1)
您需要{require}声明中列出的Underscore.js。