2011-11-16 4 views
9

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.

Respuesta

4

¿Has probado hacerlo de manera AMD en el nodo también?

http://requirejs.org/docs/node.html - podría ser la mejor solución si desea tener los mismos módulos AMD tanto en el lado del cliente como en el lado del backend.

Cuestiones relacionadas