2016-05-08 12 views
0

私はバックボーンが初めてです。複数のコレクションを使用したバックボーンビューへの実装

私の状況に適したデザインパターンを探しています。

<select id="s1"></select> 
<select id="s2"></select> 
<select id="s3"></select> 
.... 

と異なるJAX-RSのAPIのパスで、複数のバックボーンのコレクションでselectを移入しよう:

現在、私は選択複数のHTMLで構成するビューテンプレートを持っています。

var C1 = Backbone.Collection.extend({ 
    url='/path1' 
}); 

var C2 = Backbone.Collection.extend({ 
    url='/path2' 
}); 

... 

まっすぐ進む方法は、thisようなソリューションを持っていることです。

render: function(){ 
    var that = this, promises = [], 
     c1 = new C1(), c2 = new C2(), c3 = new C3(); 

    promises.push(c1.fetch()); 
    promises.push(c2.fetch()); 
    promises.push(c3.fetch()); 
    ... 

    $.when.apply(null, promises).done(function(){ 
     that.$el.html(FormTemplate({c1m: c1.models, c2m: c2.models, c3m: c3.models, ...})); 
    }); 

    return this; 
} 

しかし、これは、JavaクライアントからサーバーへのいくつかのAPI呼び出しを伴います。 1つのAPI呼び出しのみでこれを実現できる方法はありますか?

ありがとうございました。

+0

ところであなたはテンプレートで 'id'属性を持つべきではありません。ビューの2つのインスタンスがある場合、IDが重複しているため文書が無効になる –

答えて

1

明らかに、APIはすべてのデータを返す単一のルートを提供する必要があります。その後、単一のコレクションを使用してフェッチし、フィルタリングされたデータをAPI呼び出しを行うことなく他のコレクションに渡すことができます。以下のような

何か:

var SingleEndPointCollection = Backbone.Collection.extend({ 
    url = '/singleEndPoint' 
}); 

var C1 = Backbone.Collection.extend({}); 

var C2 = Backbone.Collection.extend({}); 

var C3 = Backbone.Collection.extend({}); 

var view = Backbone.View.extend({ 
    initialize: function() { 
    var that = this; 
    this.collection = new SingleEndPointCollection(); 
    this.collection.fetch({ 
     success: function(collection, response) { 
     that.c1 = new C1(collection.filter(function() { 
      // your logic here 
     })); 
     that.c2 = new C2(collection.filter(function() { 
      // your logic here 
     })); 
     that.c3 = new C3(collection.filter(function() { 
      // your logic here 
     })); 
     that.render(); 
     } 
    }); 
    }, 
    render: function() { 
    var that = this; 
    that.$el.html(FormTemplate({ 
     c1m: that.c1.toJSON(), 
     c2m: that.c2.toJSON(), 
     c3m: that.c3.toJSON() 
    })); 
    return this; 
    } 
}); 
+0

ありがとうございます。私の場合、ブートストラップされたモデルはどうですか? http://backbonejs.org/#FAQ-bootstrap – VHanded

+0

@VHandedは、このビューがリンク先ページの種類のものである場合にのみ役立ちます。後で初期化する必要があるビューのデータを読み込むと、アプリの初期状態の読み込みが遅くなります。 –

関連する問題