1

クライアント側のブランチ ビルドとノード サーバーにまったく同じバックボーン モデルを使用したいのですが、ノードのモジュール システムは、burnch がデフォルトで使用する commonjs モジュールとほとんど同じですが、違いをセットアップするには少し考える必要があります。 .

/server.js

Backbone = require('Backbone');
_ = require('underscore');
var MyAppModel = require('./app/models/MyAppModel');
var app = new MyAppModel();

/app/models/MyAppModel.js

var PeopleCollection = require('../collections/PeopleCollection'); // NODE
var PeopleCollection = require('collections/PeopleCollection'); // BRUNCH

var MyAppModel = Backbone.Model.extend({

    initialize: function() {
        this.set('people', new PeopleCollection());
    }

});

module.exports = MyAppModel;

/app/collections/PeopleCollection.js

var PersonModel = require('../models/PersonModel'); // NODE
var PersonModel = require('models/PersonModel'); // BRUNCH

var PeopleCollection = Backbone.Collection.extend({
    model: PersonModel
});

module.exports = PeopleCollection;

/app/models/PersonModel.js

var PersonModel = Backbone.Model.extend({});

module.exports = PersonModel;

基本的に、サーバーとクライアントで同じファイルを使用できない唯一のことは、パスが必要なことです。サーバーをグローバルに設定してから、次のことを行うことができます。

if (server)
    var PeopleCollection = require('../collections/PeopleCollection');
else
    var PeopleCollection = require('collections/PeopleCollection');

これにはもっとエレガントな解決策がありますか?

4

1 に答える 1

1

絶対パスを使用する必要はありません。ブランチは相対パスをサポートしています。あなたはただ使うことができます:

var PeopleCollection = require('../collections/PeopleCollection');
于 2013-10-24T12:57:12.793 に答える