knockoutJS在foreach完成渲染后执行回调

时间:2013-07-09 15:20:42

标签: knockout.js foreach

在我的代码中,我想在KnockoutJS foreach绑定完成呈现所有项目之后执行函数或回调

我知道我可以通过检查我是否在最后一个元素(我发现在execute code after the last item has been rendered)来做到这一点。
但是每次渲染新元素或记录时都会调用我的回调函数。

我只想执行一次回调函数(性能)。

更新

另一种解决方案是success callback after knockout.js finishes rendering all the elements。但是再次使用这个我的回调函数将在每次渲染一个新元素时被调用。

1 个答案:

答案 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/