2016-07-10 103 views
0

我想了解如何引用和使用傳遞給視圖的集合。似乎沒有任何對該集合的引用,但它正在使用模型。另外,當我使用綁定到我的api的集合時,我無法獲得綁定/顯示的集合項目,但是當我使用硬編碼集合時它可以工作。是否因爲我需要在某個時候取回我的收藏?我的收藏很好,路徑很好。我在整個應用程序中使用它,沒有任何問題。骨幹列表綁定到集合

下面是代碼:

module.exports = Backbone.Collection.extend({ 

    model: Employee, 

    url:"api/employees" 

}); 

的MainView

module.exports = base.extend({ 
     el: '#content', 
     template:template, 
     initialize: function() { 

      // var items = new EmployeeCollection([ 
      //  {id: 1, firstName: "Test1 fName", lastName: "Test1 lName"}, 
      //  {id: 2, firstName: "Test2 fName", lastName: "Test2 lName"}, 
      //  {id: 3, firstName: "Test3 fName", lastName: "Test3 lName"} 
      // ]); 

      EmployeeListCollection = new EmployeeCollection(); 
      //this.itemView = new EmployeeListView({collection: items}); //this syntax works if I uncomment the code above to create my item list 
      this.itemView = new EmployeeListView({collection: EmployeeListCollection}); //do i need to fetch the collection at some point? 

      this.render(); 

      }, 
      render: function(){ 

      this.el.innerHTML = Mustache.to_html(this.template); 

      this.itemView.render(); 

      $("#empList").html(this.itemView.el); 
      } 
}); 

ItemListView - 哪裏的收藏中獲得通過引用?我看到一個模型參考,但我通過了一個集合。

module.exports = base.extend({ 

    //tagName:'ul', 
    tagName:'select', 

    initialize: function(){ 
     _.bindAll(this, "renderItem"); 

    }, 

    renderItem: function(model){ 
     console.log('employeelistloop render'); 

     this.itemView = new EmployeeListItemView({model: model}); 
     this.itemView.render(); 
     $(this.el).append(this.itemView.el); 
    }, 

    render: function(){ 
     this.collection.each(this.renderItem); 
    }, 

}); 

回答

0

其實,我想我覺得問題是什麼。我確實需要在我的ItemListView中獲取集合。而且我現在也意識到渲染在renderitem之前被調用,並且集合中的每個模型都被傳遞給renderitem函數。通過在我的渲染中調用提取功能,我能夠讓我的收藏工作:

var self = this; 
this.collection.fetch().done(function(){ 
    self.collection.each(self.renderItem); 
}); 

所以現在一切都有意義。但我仍然不完全明白爲什麼我的代碼運行兩次。當我在MainView的初始化和渲染過程中執行console.log時,每次第一次運行它時都會收到兩個調用。

+0

甚至你自己的答案不[可以](http://stackoverflow.com/help/accepted-answer)。 – pnuts