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/