在我的代码中,我想在KnockoutJS foreach
绑定完成呈现所有项目之后执行函数或回调
我知道我可以通过检查我是否在最后一个元素(我发现在execute code after the last item has been rendered)来做到这一点。
但是每次渲染新元素或记录时都会调用我的回调函数。
我只想执行一次回调函数(性能)。
更新
另一种解决方案是success callback after knockout.js finishes rendering all the elements。但是再次使用这个我的回调函数将在每次渲染一个新元素时被调用。
答案 0 :(得分:22)
我认为针对此类问题的一个很好的解决方案是使用自定义绑定。它会是这样的:
ko.bindingHandlers.doSomething = {
update: function(element, valueAccessor) {
ko.utils.unwrapObservable(valueAccessor()); //grab a dependency to the obs array
//do something based on "element" (the container)
}
}
您可以使用它:
<ul data-bind="foreach: items, doSomething: items">
<li>...</li>
</ul>
doSomething
需要获取自己对items
的依赖关系,因为foreach
更新其自己的计算可观察对象,并且在KO 3.0绑定中将是独立的。您还可以将选项传递给doSomething
,然后通过allBindingsAccessor().foreach
(第三个arg)访问observableArray来获取依赖项,如果您始终将其与foreach
结合使用。
这是一个示例,每当对observbaleArray进行一次更改时,observableArray中每个元素的背景颜色随机化:http://jsfiddle.net/rniemeyer/SCqaS/