実際に持っているモデルの数、それらを保存する場所、およびUIでのレンダリング方法に応じて、これにどのように取り組むかによって異なります。
リモートサーバー上のデータベースに保存されているモデルが多数あり、グループのアイテムが個別にレンダリングされる場合、1つの方法は、グループのアイテムをオンデマンドでロードすることです。多分...のようなもの
var Item = Backbone.Model.extend({});
var ItemColleciton = Backbone.Collection.extend({
url: '/load-items',
});
var Group = Backbone.Model.extend({
items: new ItemCollection(),
initialize: function() {
// load the groups items as the group is initialized
this.items.fetch({data:{groupID:this.id}});
}
});
または、モデルの数が少ない場合は、モデルを一度にすべてロードし、フィルタリングを使用してグループにデータを入力することをお勧めします。このようなもの ...
var Item = Backbone.Model.extend({});
var ItemColleciton = Backbone.Collection.extend({
url: '/load-groups',
});
var Group = Backbone.Model.extend({
initialize: function() {
// load the groups items as a subset of the already loaded group collection
this.items = new ItemCollection(allItems.filter(function(item) {
return item.GroupID = this.id;
}, this));
}
});
// in your router init ...
var allItems = new ItemCollection();
allItems.fetch();
上記は単なる例のアプローチです。バックボーンをしばらく使用した後に私が見つけたのは、バックボーンは本当に解釈にオープンであり、さまざまな問題を解決するためにまったく異なる方法で実装できるということです。
また、バックボーンリレーショナルを確認することもできます。私自身は使用していませんが、モデルとコレクション間のマッピング関係のサポートが追加されたと思います。