2013-03-06 56 views
1

我正在與一大羣孩子一起擴展Ember.CollectionView。我需要在所有孩子都渲染完成後執行一些由jQuery插件處理的樣式化javascript。我的第一次嘗試是利用我熟悉並喜愛的didInsertElement掛鉤,但看起來這個掛鉤爲我的目的過早燃燒。Ember.js(RC1)CollectionView.didInsertElement發射得太早

根據文檔here,該鉤子被觸發時

當視圖的元件已被插入到所述DOM調用。覆蓋此功能可進行任何需要文檔正文中元素的設置。

或許,我對Ember如何呈現有誤解,但是由此可以看出我的方法應該起作用。

我遇到錯誤嗎?這是我錯誤理解的正確功能嗎?除了使用帶回調的簽入樣式系統以提醒我每個子視圖何時觸發了didInsertElement之外,是否有規範的解決方法?

編輯爲了記錄,使用簽入系統確實有效。每當父母didInsertElement開火時,我都會記錄下哪些子視圖會被檢查,但我想知道是否有更好的方法來執行此操作。

回答

4

從技術上講,CollectionView是在兒童之前插入的,所以是的,這是正確的功能。 要將回調添加到CollectionView,以便在其所有子項都已呈現時,您需要使用afterRender隊列。

App.ContainerView = Ember.ContainerView.extend({ 
    didInsertElement: function() { 
    Ember.run.scheduleOnce('afterRender', this, function(){ 
     // this will be performed after every child has been rendered 
    }); 
    } 
}) 
+0

感謝您的回答。不幸的是,看起來afterRender隊列並不像我們希望的那樣工作。我在父視圖,afterRender隊列和子視圖的didInsertElement上設置了didInsertElement的日誌記錄,這就是我在日誌中看到的:https://gist.github.com/grep-awesome/5099953。它顯示在任何子視圖呈現之前發生'afterRender'調用 – wmarbut 2013-03-06 15:15:16

+1

您是否異步地爲集合視圖後面的數組加載內容? – 2013-03-07 02:51:07

+0

我覺得有點像笨蛋......是的,是的,我正在異步加載它。所以我接受這個問題,從我原來的問題的範圍來看,這是答案。謝謝 – wmarbut 2013-03-07 14:54:01