Actualmente tengo un AMD Modelo Backbone de trabajo utilizando require.js así:Cómo utilizar un modelo Backbone con Node.js y AMD (require.js en el navegador)
// models/game.js
define(['backbone'],
function(Backbone) {
var Game = Backbone.Model.extend({
urlRoot : '/games/'
, defaults : {
name : null
}
});
return Game;
});
La organización AMD/Backbone viene de this tutorial y jrburke's Pull Request for Backbone.
Me gustaría usar el modelo Backbone en Node.js también, porque compartir modelos y colecciones Backbone ha funcionado bien en el pasado cuando no usaba AMD y, bueno, aparentemente soy un masoquista.
Así He intentado lo siguiente (inspirado por el Ministerio de Defensa 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;
}));
Pero Game
es ahora indefinido cuando lo incluyo en el navegador:
// 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;
});
Mientras miraba el CommonJS notes Me temo que aún no estoy claro. ¿Cómo uso el mismo archivo Backbone Model como un archivo AMD en el navegador y como módulo Node.js?
Y por bonificación: ¿Hay una manera más limpia que las ~ 10 líneas en la parte superior de cada archivo? Ideal sin el define shim.