2011-11-07 5 views
3

私はちょっと迷っていますので、どんな助けでも大歓迎です。 (私はBackbone.jsとCoffeeScriptを使用しています)複数のモデルのモデルですか?

私はモデルのグループを持っています。それらはすべてMasterCollectionに入れられています。

MasterCollection extends Backbone.Collection 
    model: Model 

MasterCollection.add({#attributes of a new model}) 

私は時々、これらのモデルを分離し、バッチでその属性を処理する必要があります。これらのバッチには、モデルのすべてのデータを表示できる対応するDOMビューも必要です。

Model extends Backbone.Model 
    initialize:() -> 
     #add the model to it's batch, batches are collections stored in an array 
     batches = ParentModel.get('baches') 

     #find the batch this model belongs in 
     for batch in batches 
      if batch = #the right one 
       batch.add(@toJSON) 

Batch extends Backbone.Collection 
    changeAttributes:() -> 
     for model in @models 
      #change things about the model 
  • このモデルは、バッチによって変更された場合、それはMasterCollectionでモデルを更新しますか?
  • バッチコレクションを終了したら、モデルを削除せずにどのように取り除くことができますか?
  • これらのバッチコレクションを配列よりも優れたものに保存する必要がありますか?彼らはモデルであるべきですか?

私は新しいバッチの作成にバインドするためにDOMが必要なので、それらをコレクションのモデルとして持つことは素晴らしいことです。

これは全体的にこのタイプのことを行う良い方法ですか?

ありがとうございます!

+0

私はバッチがモデルのコレクションを持つBatchModelであるべきだと思っています。 – fancy

+0

モデルのバッチコレクションも作成します。モデルを複数のコレクションに追加することもできます。そのモデルは、そのイベントが属するすべてのコレクションでブロードキャストされます。他の作品では、データをtoJSONで複製しないでください。単にbatchCollection.add(this)を実行してください。 – dira

答えて

1

このモデルをバッチによって変更すると、MasterCollectionのモデルが更新されますか?

あなたは本当にただbatchコレクションにモデルの複製を追加している

batch.add(@toJSON) 

をやっているので。したがって、そのコレクションのモデルの属性を変更すると、オリジナルは影響を受けません。もちろん

あなたは

(batch.at(0).get 'attr').x = y 

ような何かを行う場合元のattr属性を変更されますので、これらは、浅いコピーです。 (あなたは変更イベントを引き起こさないでしょう)これは、一般的なバックボーンを持つノー・ノーです。代わりに、何かのようにする

attrCopy = _.extend {}, batch.at(0).get 'attr' 
attrCopy.x = y 
batch.at(0).set attr: attrCopy