@mu_is_too_short がコメントしたように、Backbone-relational はあなたが興味を持っているものかもしれません。バックボーン リレーショナルを使用すると、モデルとサブモデル コレクションが自動的に作成され、親子関係全体でイベントを管理できます。
サンプル コードをいくつか示します。サンプル コードの一部は次のようになります。
ユーザーには多くのイベントがあります:
User = Backbone.RelationalModel.extend({
relations: [
type: Backbone.HasMany, // Type of relationship
key: 'events', // How we reference the sub-models in collection
relatedModel: 'Event', // The sub-model type
collectionType: 'EventCollection', // The sub-model collection
reverseRelation: {
key: 'belongsToUser' // Key we use to refer to the parent
}
],
// Other Backbone.Model properties and functions
});
バックボーン リレーショナル モデルを作成すると、指定した「キー」に基づいて名前が付けられたサブモデルのコレクションが自動的に作成されます。したがって、所有している各ユーザーには、整理された関連イベントの独自のコレクションがあります。
基本的に、ユーザーを作成または取得するときに、必要な関連モデルへの参照を与えます。たとえば、User id=1 には Event 5、7、および 11 が必要になる場合があります (ID を使用しているだけです)。これらの参照が配列形式で定義されている限り、リレーショナルの fetchRelated メソッドを使用して遅延ロードできます。
myUser = new User();
myUser.set({
name: 'RayMysterio',
age: '26',
events: [5, 7, 11] // Or this might just come with the User object from your server
});
myUser.fetchRelated('events');
// This will go fetch the related events for this user model from the URL you designate.
myUser.get('events');
// The collection of events are treated like an attribute of the User model.
myUser.get('events').find(function(eventModel){
return // some find condition - or whatever you want to do on that collection
});
特定のリスナーをサブモデルにバインドしたい場合があります。
myUser.bind('add:events', function(model, collection) {
// Whatever code you want to happen when new models are added to the user events coll
});
などなど
これは、1 対 1、1 対多、および逆の関係を作成する優れた方法です。これはかなり重要です。モデル間の関係を定義し、モデルを作成するとき。
たとえば、User モデルの新しいインスタンスを作成します。
バックボーン リレーショナルは自動的に逆リンクを作成します (イベント モデルには、逆リレーション キー 'belongsToUser' (または任意の名前) で定義された属性があります)。これにより、モデル/サブモデル階層を上下にトラバースするのが非常に便利になります。
あなたのリレーショナル ニーズに基づいて、これは適切なようです。
多対多が必要な場合は、(中間モデルを使用して) 回りくどい方法がありますが、私はこれがちょっと不安定であることがわかったので、避けています。Paul-Uithol はしばらくの間 Backbone-Relational を更新しており、新しい機能が追加され続けています。学習曲線は最初は私にとって少し大変でしたが、慣れ始めると非常に便利です。
注: 強調しておくと、Mosselman は Require.js を推奨しており、私もこれに強く同意します。それは私のコードをより管理しやすくしました。バックボーン リレーショナル コードをいじる (ラップする) ことで、AMD 準拠にすることができ、Require で問題なく動作します。
更新: backbone-relational は、2014 年 4 月 1 日のリリース 0.8.8 で require.js をサポートするようになりました - Kenneth に感謝します