2011-09-15 39 views
1

我一直在knockoutjs中构建一个嵌套的查询编辑器,并使用foreach模式中的beforeRemove和afterAdd选项向它添加动画。它在第一级嵌套上工作得很好,但在操作子过滤器组中的过滤器时不起作用。KnockoutJS不能应用beforeRemove和afterAdd嵌套模板

我做错了什么,或者这是KnockoutJS中的错误?嵌套模板不支持afterAdd和beforeRemove?如果是这样,是否有解决方法?

这是my jsfiddle of the problem

另外,有没有一种方法可以根据添加/删除的内容来更改动画行为?我想有不同的动画添加/删除过滤器组,然后自己添加/删除过滤器。

回答

2

您遇到此post中描述的问题。基本上,您的内部模板依赖于$ data.filters,并且每当添加一个项目时都会重新渲染整个模板。所以,你的动画不会发生,因为整个列表每次都会从头开始重新渲染。

这里是“如果”逻辑的模板,再保理少量样品推入模板绑定:http://jsfiddle.net/rniemeyer/UkGTF/

另外,如果你开始使用1.3beta原生模板,然后就可以使用if,withforeach控制流绑定来进一步简化这一点。

+0

这工作很好,它非常有意义。 – daedalus28

+0

既然这个工作,你激励我重新访问不同组件的动画,并且这样做[成功],虽然有点不雅 – daedalus28

3

我自己想出了问题的第二部分。为了可能从谷歌登陆的人的利益:

我将afterAdd和beforeRemove函数切换为显式声明(并且不在标记中),然后使用jQuery对elem元素进行一些检查以找出无论是过滤器还是过滤器组,适当地应用不同的动画。

这是final fiddle