Ember.js(RC1)CollectionView.didInsertElement过早发生

时间:2013-03-06 03:53:17

标签: javascript ember.js

我正在使用包含大量子项的扩展Ember.CollectionView。在所有孩子都渲染完之后,我需要执行一些由jQuery插件处理的样式javascript。我对此的第一次尝试是利用我所知道和喜爱的didInsertElement钩子,但看起来这个钩子对我的目的来说太早了。

根据文档here,当

时会触发此挂钩
  

将视图元素插入DOM时调用。重写此函数以执行需要文档正文中的元素的任何设置。

或许,我对Ember如何呈现产生了误解,但是从中可以看出我的方法应该有效。

我遇到了一个错误吗?这是我误解的正确功能吗?除了使用带有回调的签入样式系统以在每个子视图都被触发didInsertElement时提醒我时,是否有规范的解决方法?

编辑对于记录,使用签入系统确实有效。每当父didInsertElement被解雇时,我会统计哪些孩子观看签到,但我想知道是否有更好的方法。

1 个答案:

答案 0 :(得分: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
    });
  }
})