2016-05-08 57 views
0

我是Backbone的新手。用多個收藏夾填充骨幹視圖

我正在尋找適合我的情況的設計模式。

目前我有一個由多個HTML的視圖模板中進行選擇:

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

和去填充select與多個骨幹集合,具有不同的JAX-RS API路徑。

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調用。有沒有什麼辦法可以只用一個API調用來實現呢?

謝謝。

+0

BTW你不應該有'在模板id'屬性。當有兩個查看實例時,您的文檔將由於重複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只有在這個視圖是你的着陸頁的東西時纔有用。加載需要稍後初始化的視圖數據只會減慢加載應用程序的初始狀態。 –