在router.js中。 firebug控制台警告Backbone在那里是空的。为什么???
app.js
define([
'order!jQuery',
'order!Underscore',
'order!Backbone',
'order!router' // Request router.js
],
function($, _, Backbone, Router){
App = {
initialize: function() {
console.log("app.js initalize");
Router.initialize();
}
};
return App;
});
router.js
define([
'order!Underscore',
'order!Backbone'
],
function(_, Backbone){
var AppRouter = Backbone.Router.extend({
// Console shows Backbone is null here, why?
// I'm sure the config is correct.
routes: {
'*actions': "defaultAction"
},
defaultAction: function(actions){
// We have no matching route, lets just log what the URL was
console.log('No route:', actions);
}
});
var initialize = function(){
console.log("Router initialize");
var app_router = new AppRouter;
Backbone.history.start();
};
return {
initialize: initialize
};
});
答案 0 :(得分:3)
Backbone不支持AMD,也没有注册为模块。当需要时,它通常作为全局Backbone对象注册,因为1.3 Underscore既不支持AMD,如果你在Backbone和_ namespace下需要Backbone和Underscore,它们会将这个模块范围内的值覆盖到{{1}原因。
jQuery支持AMD,但它也将自己注册为全局实例。基本上它意味着你不需要多次需要jquery,下划线和骨干 - 如果你在requirejs主脚本中执行一次就足够了
答案 1 :(得分:-2)
另一种方法是破解backbone.js库。
注意:这将允许您在require.js定义中引用Backbone.js和underscore.js库,但它不会阻止它们被添加到全局命名空间/窗口对象中。这需要更多的黑客攻击。
查找
(function(){var l=this,y=
将其替换为:
define('backbone',['underscore','jquery'],function(_,$){
var l = this;
(function(){var y=
将其添加到页面底部:
return l.Backbone;
});
然后对underscore.js
执行相同的操作以:
开头define('underscore',function(){
添加到页面底部:
return this._;
});