2012-12-10 28 views
1

我正在使用Backbone和佈局管理器。我有這樣的代碼裏面MyView.js:渲染後的骨幹佈局管理器

afterRender: function() { 
    var scope = this; 
    this.model.get("books").each(function(bookModel) { 
      var bookView = new BookView({ 
       model: bookModel 
      }); 
      scope.insertView(".books", bookView).render(); 
    }); 
}, 

裏面BookView.js我有一個AfterRender方法:

afterRender: function() { 
    console.log("after render"); 
}, 

我在模型的書籍財產6個項目,我叫render()每本書。最終我得到的是「渲染後」只記錄一次。哪裏不對?在渲染後「丟失5」的日誌在哪裏?

回答

0

上面的代碼在MyView的afterRender方法中調用。由於不明原因,多次撥打render()的電話不會調用每本書的afterRender()。
在LayoutManager文檔中反覆閱讀之後,我意識到我需要在beforeRender()方法內調用insertView()而不渲染視圖。這種方式render()將呈現所有的子視圖和afterRender()將調用正確:

beforeRender: function() { 
    var scope = this; 
    this.model.get("books").each(function(bookModel) { 
      var bookView = new BookView({ 
       model: bookModel 
      }); 
      scope.insertView(".books", bookView); 
    }); 
},