我目前有一个使用 require.js的工作AMD主干模型,如下所示:
// models/game.js
define(['backbone'],
function(Backbone) {
var Game = Backbone.Model.extend({
urlRoot : '/games/'
, defaults : {
name : null
}
});
return Game;
});
AMD/Backbone 组织来自本教程和jrburke 对 Backbone 的 Pull Request。
我也想在 Node.js 中使用 Backbone 模型,因为在过去不使用 AMD 时共享 Backbone 模型和集合效果很好,而且,显然我是一个受虐狂。
所以我尝试了以下方法(受 Backbone mod 的启发):
// models/game.js
(function(root, factory) {
if (typeof exports !== 'undefined') {
factory(root, exports, require('backbone'));
}
else if (typeof define === 'function' && define.amd) {
define(['backbone'], function(Backbone, exports) {
factory(root, exports, Backbone);
});
}
}(this, function(root, Game, Backbone) {
Game = Backbone.Model.extend({
urlRoot : '/games/'
, defaults : {
name : null
}
});
return Game;
}));
但是Game
当我将它包含在浏览器中时现在是未定义的:
// collections/games.js
define(['backbone', 'models/game'],
function(Backbone, Game) {
var Games = Backbone.Collection.extend({
model: Game
, initialize: function() {
console.log(Game)
// Game is undefined
var game = new Game({ name: 'game1' });
}
});
return Games;
});
当我查看CommonJS notes时,恐怕我还不清楚。如何在浏览器中使用与 AMD 文件和 Node.js 模块相同的主干模型文件?
还有额外的好处:有没有比每个文件顶部的 ~10 行更简洁的方法?理想情况下没有定义垫片。