如何使用Node.js和AMD的Backbone模型(浏览器上的require.js)

baa*_*der 9 javascript node.js requirejs backbone.js js-amd

我目前有一个使用require.js的AMD Backbone模型,如下所示:

// models/game.js
define(['backbone'],
function(Backbone) {

  var Game = Backbone.Model.extend({
    urlRoot  : '/games/'
  , defaults : {
      name : null
    }
  });

  return Game;
});
Run Code Online (Sandbox Code Playgroud)

AMD/Backbone组织来自本教程jrburke的Backbone请求.

我也想在Node.js中使用Backbone模型,因为在不使用AMD时,共享Backbone模型和集合在过去运行良好,而且,显然我是一个受虐狂.

所以我尝试了以下(受Backbone mod的启发):

// 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;
}));
Run Code Online (Sandbox Code Playgroud)

但是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;
});
Run Code Online (Sandbox Code Playgroud)

当我查看CommonJS笔记时,我恐怕还不清楚.如何在浏览器和Node.js模块中使用相同的Backbone Model文件作为AMD文件?

奖励:是否有比每个文件顶部~10行清晰的方式?理想情况下没有定义垫片.

Tom*_* Tu 4

您是否也尝试过在节点上以 AMD 方式执行此操作?

http://requirejs.org/docs/node.html - 如果您想在客户端和后端拥有相同的 AMD 模块,这可能是最好的解决方案。