2017-02-01 15 views
0

私は次のシナリオがあります。BackBoneを使用してビューに一意のモデルをフェッチするためのベストプラクティス?

項目グリッドを>グリッドから1つの項目を選択し>Item Detailビューを開きます。


うーん...

WICHはItemDetailモデルを初期化し、変数に保管するためのベストプラクティスですか?

  • 一部のグローバル変数を格納し、すべてのアイテムをリセットします。詳細fetch
  • の変数に格納されますか?

スニペット:

app.ItemDetailView = Backbone.View.extend({ 

    initialize: function(id){ 
     app.ItemDetailInstance = new ItemDetail(id); 
     //OR 
     this.itemDetail = new ItemDetail(id); 

     //fetch 
    } 
} 
+3

可能な限り、グローバルは避けてください。 –

+0

ローカルitemDetailは正しいですか? – Lucas

+1

モデルをビューのローカルに保つのが最善の方法ですが、もう一度、実際には全体のアプリ実装の詳細に依存します。 –

答えて

0

すべてのあなたのアイテムを取得するために、バックボーンのコレクションを使用していますか?

バックボーンに問題があるということは、あなたのアーキテクチャについて完全に無料であるためです。しかし、ItemDetailViewを作成する前に、モデルを取得する必要があると思います。

app.listItemsView = Backbone.View.extend({ 

    initialize: function() { 
     // You fetch the collection once 
     // This collection contain all items models 
     this.collection = collection.fetch(); 
    }, 

    onItemClick: function(id) { 
     // Get the id or cid of a specific item 
     var model = this.collection.get(id); 
     // Model object already contain data of the model 
     var view = new ItemDetailsView({model: model}); 
    } 
}) 

これは、コレクションやモデルの基本的な使用である:あなたがコレクションを使用している場合

。 すべてのモデルを含むグローバルコレクションをフェッチできる場合は、一度フェッチしてからビューを再生するだけです。

+1

答えの開始に同意しますが、コードの例は間違っています。特定のモデルをフェッチすることができます。これは、コレクションをフェッチするときにも発生します。ほとんどの場合、コレクションは各オブジェクトの簡略版を受け取ります。特定のモデルのフェッチは、ネストされたデータを持つ完全なオブジェクトを返します(必要な場合)。 –

+1

また、 'fetch'関数はコレクションやモデルを返さないことに注意してください。これは['jqXHR'](http://api.jquery.com/Types/#jqXHR)オブジェクトを返します。また、Backboneビューでは、オプションオブジェクトが引数であり、モデルインスタンスではありません。これは 'ItemDetailsView({model:model})'でなければなりません。 –

+0

Yeap ....私のシナリオではオブジェクト全体が必要です – Lucas

関連する問題