我想做一个骨架应用程序使用require.js,backbone.js和underscore.js。根据www tutorials,我已经创建了一个框架,但是我在某个地方有一个bug。
这是init.js代码:
requirejs.config({
baseUrl: 'js',
paths: {
jquery: 'http://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery',
underscore: 'http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore',
backbone: 'http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone'
},
shim: {
backbone: {
deps: ['jquery', 'underscore'],
exports: 'Backbone'
},
underscore: {
exports: '_'
},
jquery: {
exports: '$'
}
}
});
require(['underscore', 'backbone', 'app'],
function(_, Backbone, app) {
console.log(app);
app.start();
});这是app.js:
require(['underscore', 'backbone'],
function(_, Backbone) {
'use strict';
return {
start: function() {
console.log('APP', 'start');
}
};
});这是index.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Wealthy Laughing Duck</title>
<script data-main="js/init" src="http://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.5/require.min.js"></script>
</head>
<body>
</body>
</html>我面临的问题是app.js文件return不能工作(可能是require.js出了问题)。控制台输出为:
undefined ----- init.js:24
Uncaught TypeError: Cannot call method 'start' of undefined ----- init.js:25问题是:如果app是在init.js中定义的,为什么它在app.js中是未定义的
编辑:目录结构如下:
/ index.html
/ js / init.js
/ js / app.js发布于 2013-05-18 02:02:36
app.js需要调用define,而不是require。这将为其他模块提供一个名为'app‘的模块:
app.js
define(['underscore', 'backbone'],
function(_, Backbone) {
'use strict';
return {
start: function() {
console.log('APP', 'start');
}
};
});发布于 2013-05-18 01:51:44
我认为你需要将app添加到你的路径中,以便需要它。
requirejs.config({
baseUrl: 'js',
paths: {
jquery: 'http://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery',
underscore: 'http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4 /underscore',
backbone: 'http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone'
app: '../../App' // your relative pathwhere you have your app.js file
},
shim: {
backbone: {
deps: ['jquery', 'underscore'],
exports: 'Backbone'
},
underscore: {
exports: '_'
},
jquery: {
exports: '$'
}
}
});发布于 2013-05-18 02:02:33
我认为你可能遇到的是语法问题,而不是其他问题。下面是我如何设置在require.js上调用的require_config.js:
require.config({
baseUrl: '/ui/js',
paths : {
'incl' : '/ui/incl'
},
shim: {
'backbone': {
//These script dependencies should be loaded before loading
//backbone.js
deps: ['underscore', 'jquery'],
//Once loaded, use the global 'Backbone' as the
//module value.
exports: 'Backbone'
}
}
});这将设置所有的依赖项(我没有路径成员,因为我只是在脚本标记中声明了backbone和下划线以及jquery )。但不要紧,一旦它们都定义好了,我就不需要再引用它们了。下面是一个简单的控制器示例,演示了这一点:
require([
'models/myModel',
'views/myView
], function(MyModel, MyView) {
var MyController = function() {
var my_model = new MyModel();
var view = new MyView({
model : my_model
});
}
$(function() {
new MyController();
});
});如您所见,jQuery、Backbone和Underscore都没有被引用。他们已经装上子弹了。
https://stackoverflow.com/questions/16615043
复制相似问题