2012-11-24 42 views
2

我有一個ContainerView它包含一個CollectionView。在此之後的CollectionView呈現在屏幕上我需要執行一個jQuery功能基本上看起來通過呈現模板的內容,並執行一些顯示修改。在Ember.CollectionView渲染結束時運行jquery

如果我執行的CollectionView它工作的didInsertElement內的jQuery,但它得到了在的CollectionView在那裏,我真的只需要它,一旦在年底完成每一個元素執行。我如何指定?

http://jsfiddle.net/JFqNr/(注意不渲染上的jsfiddle或某種原因,但只是爲了顯示你的結構)

App = Ember.Application.create(); 

App.FooContainerView = Ember.ContainerView.extend({ 
    childViews: ['elementList'],  

    elementList: Ember.CollectionView.extend({ 
     content: function() { 
      return [ 
       { Title: "Dashboard", ID: "dashboard" }, 
       { Title: "Invoices", ID: "invoices" }, 
       { Title: "Expenses", ID: "expenses" }, 
       { Title: "People", ID: "people" }, 
       { Title: "Reports", ID: "reports" }, 
       { Title: "Settings", ID: "settings" } 
      ]; 
     }.property(),   
     template: Ember.Handlebars.compile('{{view.content.title}}'), 

     didInsertElement: function() { 
      // perform jquery function    
     } 
    }), 

    didInsertElement: function() { 
     // does not work if perforemed here 
    }  
}); 

App.initialize(); 
​ 

回答

4

做到這一點的功能僅是最近被添加到主分支,所以你需要編譯你自己的Ember版本。
現在,您可以安排一個afterRender隊列,以便在渲染完所有單個視圖後運行。

App.FooContainerView = Ember.ContainerView.extend({ 
    // Existing code 
    didInsertElement: function() { 
    Ember.run.scheduleOnce('afterRender', this, function(){ 
     // perform jQuery function here; 
    }); 
} 

有關代碼詳細信息,請參閱https://github.com/emberjs/ember.js/pull/1528

+0

啊真棒謝謝 – user391986

+0

這是非常有用的,並且很可能會解決我現在使用'Ember.run.next()'執行代碼對dom元素的問題。 @Bradley,當這個代碼最終會在最新的ember中結束時,你有沒有什麼預測? – Aras

+0

@Aras現在已經出來了 –