В настоящее время у меня есть работающая модель магистрали AMD с использованием require.js, например:
// models/game.js
define(['backbone'],
function(Backbone) {
var Game = Backbone.Model.extend({
urlRoot : '/games/'
, defaults : {
name : null
}
});
return Game;
});
Организация AMD/Backbone взята из этого руководства и запрос jrburke на вытягивание для Backbone.
Я бы хотел использовать модель Backbone и в Node.js, потому что совместное использование моделей и коллекций Backbone в прошлом хорошо работало, когда не использовалась AMD, и, видимо, я мазохист.
Итак, я попробовал следующее (вдохновленный модом Backbone):
// 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, боюсь, я все еще не понял. Как использовать один и тот же файл модели магистрали в качестве файла AMD в браузере и в качестве модуля Node.js?
И в качестве бонуса: Есть ли более чистый способ, чем ~10 строк в начале каждого файла? В идеале без определить оболочку.