KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd

时间:2011-09-15 06:42:42

标签: knockout.js

我在knockoutjs中构建了一个嵌套查询编辑器,并在foreach模式下使用模板上的beforeRemove和afterAdd选项为其添加了动画。它在第一级嵌套时工作得很好,但在处理子过滤器组中的过滤器时则不行。

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

这是my jsfiddle of the problem

此外,有没有办法根据添加/删除的内容更改动画行为?我希望有不同的动画来添加/删除过滤器组,然后添加/删除过滤器本身。

2 个答案:

答案 0 :(得分:3)

我自己想出了问题的第二部分。为了任何可能从谷歌来到这里的人的利益:

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

以下是final fiddle

答案 1 :(得分:2)

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

以下是在模板中进行少量重新分解以将“if”逻辑推入模板绑定的示例:http://jsfiddle.net/rniemeyer/UkGTF/

此外,如果您开始使用1.3beta本机模板,那么您可以使用ifwithforeach控制流绑定来进一步简化此操作。< / p>