У меня в настоящее время есть рабочая 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 и в 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 notes , боюсь, мне все еще неясно. Как использовать тот же файл базовой модели, что и файл AMD в браузере, и модуль Node.js?
И для бонуса: Есть ли способ чище, чем ~ 10 строк вверху каждого файла? В идеале без определить шим .