我在knockoutjs中构建了一个嵌套查询编辑器,并在foreach模式下使用模板上的beforeRemove和afterAdd选项为其添加了动画。它在第一级嵌套时工作得很好,但在处理子过滤器组中的过滤器时则不行。
我做错了什么,或者这是KnockoutJS中的错误?嵌套模板是否支持afterAdd和beforeRemove?如果是,是否有解决方法?
此外,有没有办法根据添加/删除的内容更改动画行为?我希望有不同的动画来添加/删除过滤器组,然后添加/删除过滤器本身。
答案 0 :(得分:3)
我自己想出了问题的第二部分。为了任何可能从谷歌来到这里的人的利益:
我将afterAdd和beforeRemove函数切换为显式声明(并且不在标记中),然后使用jQuery对elem元素进行一些检查,以确定它是过滤器组还是过滤器组,适当地应用不同的动画。 / p>
以下是final fiddle
答案 1 :(得分:2)
您正遇到此post中描述的问题。基本上,您的内部模板依赖于$ data.filters,并且每当添加项目时最终都会重新呈现整个模板。因此,您的动画不会发生,因为每次都会从头开始重新渲染整个列表。
以下是在模板中进行少量重新分解以将“if”逻辑推入模板绑定的示例:http://jsfiddle.net/rniemeyer/UkGTF/
此外,如果您开始使用1.3beta本机模板,那么您可以使用if
,with
和foreach
控制流绑定来进一步简化此操作。< / p>