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

ebr*_*lil 13 foreach knockout.js

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

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

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

UPDATE

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

RP *_*yer 23

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

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

您会像以下一样使用它:

<ul data-bind="foreach: items, doSomething: items">
     <li>...</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

doSomething需要抓住自己的依赖关系items,因为foreach它自己的内部更新计算观察到的,在KO 3.0绑定将是独立的.您也doSomething可以通过allBindingsAccessor().foreach(第三个arg)访问observableArray来传递选项,然后通过访问obareableArray获取依赖关系(如果您始终将其与之结合)foreach.

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