2011-11-16 8 views
9

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.

risposta

4

Hai provato a farlo anche in modalità AMD sul nodo?

http://requirejs.org/docs/node.html - potrebbe essere la soluzione migliore se si desidera avere gli stessi moduli AMD sia sul lato client che sul lato backend.

Problemi correlati