2012-10-25 83 views
2

我有一個骨架牽線木偶組合大視圖遵循骨幹木偶組合大查看的OnRender執行兩次

VideosView = Backbone.Marionette.CompositeView.extend({ 
     template : videosTpl, 
     id : "video", 
     itemView : VideoView, 

     initialize : function() { 
       //fetching the collection 
      var myVideos = new VideoCollection(); 
      myVideos.fetch(); 
      this.collection = myVideos; 
     }, 
     appendHtml : function(collectionView, itemView) { 
      //appending each videos to the video list 
      console.log("appendHtml"); 
      collectionView.$("ul").append(itemView.el); 

     }, 
     onRender: function(){ 
      console.log("onRender"); 

     }, 
     onShow: function(){ 
      console.log("onShow"); 

     } 
    }); 

在控制檯的輸出是

  • 的OnRender
  • 昂秀
  • 4 appendHtml
  • onRender

的預期碼流根據骨幹提線木偶是

  • 4 appendHtml
  • 的OnRender
  • 昂秀

任何想法,這是怎麼發生的?

在此先感謝

Renjith

+1

我已經看到了這一點,固定在V1.0.0-β2在文檔加載之前創建VideosView時發生。嘗試創建在document.ready – Pramod

+0

VideosView我已經使用require js和視圖加載document.ready。 – Renjith

+0

噢好的。嘗試使用未縮小的Backbone.js代碼逐步瀏覽代碼,並查看哪個對象正在觸發事件。 – Pramod

回答

2

這可能是因爲您在初始化函數獲取數據?取指導致collection.reset()等您的複合視圖將重新呈現爲文檔中所述:

「的爲合成視圖模型和集將重新呈現自身在下列條件下:

  • 當收集的「復位」事件被觸發,只會重新呈現在複合材料中的收集,而不是包裝的模板......」

事實上,當你分配給this.collectionmyVideos您無法保證由於Javascript的異步特性,10完成了它的工作。

嘗試類似的東西,當你調用VideosView:

var myVideos = new VideoCollection(); 

myVideos.fetch({success:function(){ 

    var View = new VideosView({collection:myVideos}); 
}}); 

當然現在你可以空出你的初始化函數。