13

在我的代码中,我想在 KnockoutJSforeach绑定完成渲染所有项目后执行函数或回调

我知道我可以通过检查我是否在最后一个元素来做到这一点(我发现这里在最后一个项目被渲染后执行代码)。
但是使用这个我的回调函数将在每次呈现新元素或记录时被调用。

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

更新

另一个解决方案是在knockout.js 完成渲染所有元素后成功回调。但再次使用这个我的回调函数将在每次呈现新元素时被调用。

4

1 回答 1

24

我认为此类问题的一个很好的解决方案是使用自定义绑定。它会是这样的:

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它自己计算的 observable 和 KO 3.0 绑定中的更新将是独立的。doSomething如果您总是将allBindingsAccessor().foreach其与foreach.

这是一个示例,它在每次更改 observbaleArray 时随机化 observableArray 中每个元素的背景颜色:http: //jsfiddle.net/rniemeyer/SCqaS/

于 2013-07-09T17:05:48.583 回答