2014-09-22 34 views
0

我正在開發一個Backbone應用程序。骨幹多個集合提取和渲染

我有一個名爲「儀表板」的視圖。在這個儀表板視圖中,我將獲取兩個數據集合;一個用於來自文章表的最近文章的列表,另一個用於來自作者表的作者列表。

請注意,我在mySQL數據庫中有兩個不同的表,我使用SlimPHP Api來進行查詢和檢索數據。

我也使用Handlebars模板化Javascript庫來編譯HTML。

問題: 我的問題是,是什麼使這兩個查詢,然後將數據發送兩個集合到車把編譯,這將創建HTML(通過收集模式循環後),並最終被考慮的最佳方法渲染功能。

這裏是我試過至今(儀表板視圖JavaScript文件):

http://jsfiddle.net/n6c3q16r/2/

我想取兩個模型的數據,並將其傳遞到上的jsfiddle上線#17渲染功能:

this.$el.html(this.template(this.collection, this.topAuthorsCollection)); 

但這不起作用。

+0

仍然沒有答案:*( – Mark 2014-09-22 21:12:46

+0

如果你有兩個集合,您需要將另一個引用傳遞給第二個集合,或者需要構建兩個單獨的視圖,每一個都負責不同的收藏。除非你需要顯示數據的方式是密不可分的,否則我會推薦後者。 – kinakuta 2014-09-23 04:50:12

回答

0

您可以使用承諾。我在這種情況下個人最喜歡的是jQuery.when

$.when(collection1.fetch(),collection2.fetch()).done(function(){ 
     //Do stuff here 
}); 

API - http://api.jquery.com/jquery.when/

更新小提琴 - http://jsfiddle.net/n6c3q16r/4/

+0

它給出了一個錯誤:Uncaught ReferenceError:fetchOne沒有定義 – Mark 2014-09-25 10:07:22

+0

更新的小提琴。 – 2014-09-26 09:10:20

0

試試這個:

initialize: function() { 
    this.listenTo(this.topAuthorsCollection, 'reset', this.render); 
    this.topAuthors = new topAuthorsModel(); 
    this.topAuthorsCollection = new topAuthorsCollection({model: this.topAuthors}); 
    this.collection.fetch({ 
     reset: true, 
     success: function() { 
      this.topAuthorsCollection.fetch({reset: true}) 
     } 
    }); 

}