2011-12-23 10 views
2

私はアイテムのコレクションを持っていますが、属性の共有ステムの外では(ID、タイトルのような)いくつかのデータを共有しています。ビジネスロジック。Backbone.jsの混合コレクションに最適なデザインパターン

私の問題は、バックボーンスタイルのMVCでの経験がなくて、私はそれぞれの賛否両論は分かりません。もしかするともっと上品な解決策があるのか​​もしれません。私が潜在的に使用できる3つのテクニックの例は次のとおりです。

var gizmoCollection = new Backbone.Collection(); // or extend 
var gizmoModel = Backbone.Model.extend({ ... }); 

var morgView = Backbone.View.extend({ ... }); 
var blarView = Backbone.View.extend({ ... }); 


// 1.) Create an attribute for the view in the model? 
gizmoCollection.add(new gizmoModel({ title: 'Gizmo1': view: morgView })); 
gizmoCollection.add(new gizmoModel({ title: 'Gizmo2': view: blarView })); 


// 2.) Or create a seperate model for each type of model? 
var morgModel = morgModel.extend({}); 
var blarModel = blarModel.extend({}); 

gizmoCollection.add(new morgModel({ title: 'Gizmo1' }); 
gizmoCollection.add(new blarModel({ title: 'Gizmo2' }); 


// 3. Or register 'types' of views? 
gizmoView.subClassView('morg', morgView); 
gizmoView.subClassView('blar', blarView); 
gizmoCollection.add(new gizmoModel({ title: 'Gizmo1', type: 'morg' }); 
gizmoCollection.add(new gizmoModel({ title: 'Gizmo2', type: 'blar' }); 

答えて

1

別のモデルを作成し、必要に応じて表示します。その理由は、各モデルがそれ自身のビジネスロジックを保持する必要があるからです。モデルタイプやモデル属性値ごとに異なるプレゼンテーションロジックしかない場合は、サブビューを使用するだけで簡単に行うことができます。

あなたは、次の点に注意しておく必要があります。

  1. 表現的論理がプレゼンター(S)(Backbone.View)
  2. モデルへのビジネスロジックのgoest(S)(Backbone.Model)
  3. ナビゲーションへ行きますロジックのいずれかのルーター(別名コントローラ)か、この仕事をするBackbone.EventsまたはjQuery.callbacks()からあなたのイベントバスを作ることができます。

最終的な注記。あなたのアプリが成長することを常に心に留めておいてください。複雑なコードを必要としないにも関わらず、コードをいくつか追加することは賢明です。しかし、ある時点でコードがより複雑になることをあなたが感じるならば、すぐにそれをやるべきであり、後で十分な時間を取らないようにするべきです。

関連する問題