2012-02-13 80 views
7

This question演示了覆盖Ember.View实例的didInsertElement允许您在视图的元素位于DOM中后执行一些代码。Ember.js:如何在每个子视图呈现后钩住Ember.CollectionView?

http://jsfiddle.net/gvUux/2/

当然,你添加到Ember.CollectionView将运行钩每个子视图渲染并插入后的子视图类中重写didInsertElement。在Ember.CollectionView,arrayDidChangecontentDidChange

http://jsfiddle.net/BFUvK/1/

两型集合钩,执行下面的内容已经改变后,但他们执行任何渲染发生之前。对添加到数组的每个元素执行arrayDidChange,并且contentDidChange包装内容绑定。

我想能够钩周围渲染管线,像willInsertCollectiondidInsertCollection东西,和之前所有的子元素都渲染后操作DOM - 本质上,前后左右contentBinding后置过滤器。

任何想法?我很难过。

回答

3

如果您希望在渲染视图之前和/或之后执行某些操作,应分别使用willInsertElement和/或didInsertElement。在这种情况下,因为您希望“在渲染所有子元素之前和之后操作DOM”,您应该在CollectionView上调用这些元素。

我不太清楚“contentBinding周围的滤镜前后的含义”,所以如果这不能回答你的问题,如果你能澄清我会很乐意帮助。

jsFiddle if needed

+1

非常感谢您的帮助。不过,我担心CollectionView'didInsertElement'挂钩在每个已添加孩子的'didInsertElement'版本被触发_before_,[这里是一个修改示例。](http://jsfiddle.net/NFDqW/5/) I认为我可以找到一个解决方法,但我仍然在试图找到正确的模式来收集我想要的东西。再次感谢。 – scottburton11 2012-02-14 07:01:43

+0

您所做的修改是在CollectionView的ItemView中进行的,并且在每个添加的子版本之前都会触发。你能更具体地了解你想要完成什么吗? – 2012-02-14 12:11:35

+0

我已经更新了[jsFiddle](http://jsfiddle.net/ud3323/NFDqW/)来完成你刚才在CollectionView而不是ItemView中做的事情。 – 2012-02-14 12:32:49

0

我想申请一个滚动动画推新对象后滑动列表了。该列表使用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'); 
});