Как использовать Магистральную Модель с Node.js и AMD (require.js в браузере) - PullRequest
9 голосов
/ 17 ноября 2011

У меня в настоящее время есть рабочая 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 и в 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 notes , боюсь, мне все еще неясно. Как использовать тот же файл базовой модели, что и файл AMD в браузере, и модуль Node.js?

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

1 Ответ

4 голосов
/ 25 ноября 2011

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

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

...