我在/utils/routerExtend.js中有这个文件:
(function() {
_.extend(Backbone.Router.prototype, Backbone.Events, {
before: function() {},
after: function() {},
route: function(route, name, callback) {
Backbone.history || (Backbone.history = new Backbone.History);
if (!_.isRegExp(route)) route = this._routeToRegExp(route);
if (!callback) callback = this[name];
Backbone.history.route(route, _.bind(function(fragment) {
var that = this;
var args = this._extractParameters(route, fragment);
if (_(this.before).isFunction()) {
this.before.apply(this, args);
}
if (callback) callback.apply(that, args);
if (_(this.after).isFunction()) {
this.after.apply(this, args);
}
}, this));
}
});
}).call(this);
现在,我不再需要了(事实上,从未使用过它,只是了解它对我的应用程序的使用/优势),我是否必须每次都将它与Backbone一起包含在内我这样做:
define(["backbone", "/utils/routerExtend.js"], function(Backbone, ???) {
以上是否正确?
另外,如何让我的routerExtend.js成为一个真正的模块?不幸的是,为了开始这个而苦苦挣扎......
答案 0 :(得分:1)
是的,您必须在使用index.html的每个文件中包含此内容。
define(["backbone", "/utils/routerExtend.js"], function(Backbone, ???) {
???将是/utils/routerExtend.js在该文件中使用的任何var 像这样可能:
define(["backbone", "/utils/routerExtend.js"], function(Backbone, RouterExtend) {
上面的代码将会在变量RouterExtend中加载/utils/routerExtend.js脚本然后你可以在任何你想使用的文件中的任何地方使用RouterExtend var /utils/routerExtend.js.
答案 1 :(得分:0)
您可以在配置中设置deps。所以像这样:
var require = {
paths: {
jquery: 'lib/jquery',
underscore: 'lib/underscore',
backbone: 'lib/backbone'
},
shim: {
backbone: {
deps: ['jquery', 'underscore']
exports: 'Backbone',
init: function($, _){
var Backbone = this.Backbone;
_.extend(Backbone.Router.prototype, Backbone.Events, {
// your setup code here
})
return Backbone;
}
}
}
}
此处有更多详情:http://requirejs.org/docs/api.html#config-shim
另一种方法是在mybackbone.js中创建自己的“骨干模型”:
define(["backbone"], function(Backbone) {
_.extend(Backbone.Router.prototype, Backbone.Events, {
// your setup code here
});
return Backbone
});
然后在项目中使用mybackbone而不是原始项目。