当我在我的Backbone.js应用程序上运行r.js优化器时,我收到此错误:
Uncaught TypeError: undefined is not a function
它出现在输出的Backbone.js部分的中间。
我删除了一些代码,直到找到导致它的原因,似乎是在我调用Backbone.history.start();
时。
我已经创建了一个简单的应用程序来复制该错误,我在下面发布了这个错误。基本上,它创建了一个路由和'console.log'的'home'。没有优化时它工作正常。
为了优化应用,我使用:
node r.js -o app.build.js
来自/ js文件夹的。
我有Backbone.js 0.9.2,RequireJS 2.1.1,r.js 2.1.1
有没有人遇到过这个?我仍然是Backbone.js / RequireJS的新手,所以希望它只是一些愚蠢的我做错了。
/js
/libs
- backbone.js
- require.js
- underscore.js
- app.build.js
- r.js
- site.js
index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script data-main="/js/site.js" src="/js/libs/require.js"></script>
</body>
</html>
requirejs.config({
baseUrl : 'js/',
paths : {
jquery : '//ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min',
backbone : 'libs/backbone',
underscore : 'libs/underscore'
},
shim : {
backbone : {
deps : ['underscore', 'jquery'],
exports : 'Backbone'
},
underscore : {
exports : '_'
}
}
});
require(['jquery', 'backbone'], function($, Backbone) {
var Router = Backbone.Router.extend({
routes : {
'' : 'home'
},
home : function(){
console.log('home');
}
}),
appRouter;
$(function() {
appRouter = new Router();
Backbone.history.start();
});
});
({
baseUrl: ".",
name: 'site',
paths: {
jquery: 'empty:',
underscore: 'libs/underscore',
backbone: 'libs/backbone'
},
out: 'site-built.js',
shim : {
backbone : {
deps : ['underscore', 'jquery'],
exports : 'Backbone'
},
underscore : {
exports : '_'
}
}
})
谢谢!
这是site-built.js的输出。任何人都可以看到任何明显错误吗?
答案 0 :(得分:0)
我内联jQuery,它似乎现在正常工作。 (它在API shim docs on requirejs.org的底部提到,但不在Optimize部分的任何位置。)
不确定这是否是正确的修复,但希望它能帮助其他人。