Javascript Ember.js:在渲染每个子视图之后,如何钩住Ember.CollectionView?

Javascript Ember.js:在渲染每个子视图之后,如何钩住Ember.CollectionView?,javascript,dom,ember.js,Javascript,Dom,Ember.js,演示重写Ember.View实例的didInsertElement允许您在视图的元素位于DOM中后执行一些代码 当然,在您添加到Ember.CollectionView的子视图类上重写didInsertElement,将在呈现和插入每个子视图后运行挂钩 Ember.CollectionView上的两个面向集合的钩子,arrayDidChange和contentDidChange,在基础内容更改后执行,但在任何呈现发生之前执行arrayDidChange,并且contentDidChange包

演示重写Ember.View实例的
didInsertElement
允许您在视图的元素位于DOM中后执行一些代码

当然,在您添加到Ember.CollectionView的子视图类上重写
didInsertElement
,将在呈现和插入每个子视图后运行挂钩

Ember.CollectionView上的两个面向集合的钩子,
arrayDidChange
contentDidChange
,在基础内容更改后执行,但在任何呈现发生之前执行<对添加到数组中的每个元素执行code>arrayDidChange,并且
contentDidChange
包装内容绑定

我希望能够在呈现管道上挂接,比如
willInsertCollection
didinsercollection
,以便在呈现所有子元素之前和之后操作DOM—基本上是在
contentBinding
前后的过滤器


有什么想法吗?我被难住了。

如果你想在视图渲染之前和/或之后做点什么,你应该分别使用
willInsertElement
和/或
didinertelement
。在这种情况下,由于您希望“在呈现所有子元素之前和之后操作DOM”,因此应该在CollectionView上调用这些操作

我不太清楚你所说的“内容绑定前后过滤器”是什么意思,所以如果这不能回答你的问题,如果你能澄清一下,我很乐意提供帮助


我想在推送新对象后应用滚动动画向上滑动列表。该列表是使用ArrayController和
#each
助手呈现的。只要在控制器上触发一个事件,视图在推送对象后订阅该事件,就会导致动画在内容更改实际呈现之前执行。下面的技巧对我非常有效

//excerpt from my loadMore method on the ArrayController

var self = this;
self.content.pushObjects(moreItems);
Ember.run.scheduleOnce('afterRender', this, function()
{
  self.trigger('loadMoreComplete');
});

非常感谢你的帮助。尽管如此,我担心CollectionView
didInsertElement
钩子在每个添加的子版本的
didInsertElement
之前被触发,我想我可以找到一个解决方法,但我仍在努力为集合找到正确的模式,从而提供我所需要的。再次感谢。您所做的修改在CollectionView的ItemView中,是的,它将在每个添加的子版本之前触发。您可以更具体地说明您正试图完成的任务吗?我已经更新了,以便在CollectionView而不是ItemView中完成您正试图完成的任务。谢谢,我看到它现在在JSFIDLE中工作。不过,我在应用程序中有此行为的精确副本,它有相反的行为-collectionView的
didInsertElement
在添加到DOM时激发,而不是在添加任何子元素时激发。我不知道为什么。在任何情况下,我都会将此标记为已接受。谢谢你的帮助!我又更新了那把小提琴。听起来您需要在这里操作runloop(仍然很好奇您到底想做什么)。runloop是一个有趣的野兽。。。我不会在这里详细介绍它是如何工作的,但希望代码能解释得足够多。另外,请看一下函数,特别是Ember.run.*函数。