Al momento ho un lavoro AMD Backbone modello utilizzando require.js in questo modo:Come utilizzare un modello Backbone con Node.js e AMD (require.js sul browser)
// models/game.js
define(['backbone'],
function(Backbone) {
var Game = Backbone.Model.extend({
urlRoot : '/games/'
, defaults : {
name : null
}
});
return Game;
});
Il/organizzazione Backbone AMD viene da this tutorial e da jrburke's Pull Request for Backbone.
Mi piacerebbe utilizzare anche il modello Backbone in Node.js, perché la condivisione di modelli e raccolte Backbone ha funzionato bene in passato quando non si utilizza AMD e, beh, apparentemente sono un masochista.
Così ho provato quanto segue (ispirato dal mod 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;
}));
Ma Game
è ora definito quando includo nel browser:
// 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;
});
Mentre ho guardato il CommonJS notes , Temo di non essere ancora chiaro. Come si utilizza lo stesso file modello Backbone come file AMD nel browser e come modulo Node.js?
E per bonus: C'è un modo più pulito rispetto al ~ 10 linee nella parte superiore di ogni file? Idealmente senza define shim.