バックボーンのチュートリアルで説明されている最も簡単な方法:
var Events = Backbone.Collection.extend({
initialize: function(){
this.params = new Params()
}
})
var Tournaments = Backbone.Model.extend({
initialize: function(){
this.events = new Events()
}
})
var tournaments = new Tournaments()
必要に応じてネストを続けることができます。同様のタスクに取り組んでいたとき、コレクションの状態を表すモデルで各コレクションをラップし、コレクション イベントに応答してそれ自体を変更しました。これにより、ネストされたコレクションに、モデル内の実際の状態を持つ状態について問い合わせることができなくなります。
var CollModel = Backbone.Model.extend({
defaults: {
state = ''//or list or dict or whatever
},
initialize: function(){
this.items = new Backbone.Collection();
this.items.on('all', this.setState, this)
},
setState: function(){
this.set(
'state',
this.items.reduce(function(state, item){
/*calculate state*/
}, '')
)
},
info: function(){
return this.get('state')
}
})
したがって、同様の手法でコレクションモデルをネストし、計算方法に応じて instance.info() を介してその状態を直接読み取ることができます。最上位モデルの状態は、下位のモデル コレクションのカスケード更新から更新されます。