Как использовать магистральную модель с Node.js и AMD (require.js в браузере)

В настоящее время у меня есть работающая модель магистрали AMD с использованием require.js, например:

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

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

  return Game;
});

Организация AMD/Backbone взята из этого руководства и запрос jrburke на вытягивание для Backbone.

Я бы хотел использовать модель Backbone и в Node.js, потому что совместное использование моделей и коллекций Backbone в прошлом хорошо работало, когда не использовалась AMD, и, видимо, я мазохист.

Итак, я попробовал следующее (вдохновленный модом 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;
}));

Но 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;
});

Пока я просматривал примечания по CommonJS, боюсь, я все еще не понял. Как использовать один и тот же файл модели магистрали в качестве файла AMD в браузере и в качестве модуля Node.js?

И в качестве бонуса: Есть ли более чистый способ, чем ~10 строк в начале каждого файла? В идеале без определить оболочку.


person baalexander    schedule 16.11.2011    source источник


Ответы (1)


Вы пытались сделать это AMD и на узле?

http://requirejs.org/docs/node.html — может быть лучшим решением, если вы хотите иметь одни и те же модули AMD как на стороне клиента, так и на стороне сервера.

person Tom Tu    schedule 24.11.2011