以前一直在想,ko.pureComputed 好像用不上。看起来高大上。
今天在修复一个bug时,发现了它的妙处。
在修改商品列表的页面,弹出一个新增商品的页面。关闭之后,怎么通知修改商品列表的页面发生改变。
也许都会说用root.vm里面的列表。这样的改动就太大了。
因为商品列表是有序号的,我刚好用到了index(),出现了跳号,
原来是
商品列表:
viewmodel(params){
var items = vm.getitems(typeno);
this.items = items;
this.typeno = typeno
}
template
<!--ko foreach:vm.orderitems-->
<!--ko if:$data.typeno === this.typeno-->
<span data-bind="text:$index()+1"></span>
<!--/ko-->
<!--/ko-->
改成了
<!--ko foreach:items-->
<span data-bind="text:$index()+1"></span><!--/ko-->
<!--/ko-->
但是修改了之后,通知了vm.orderitems改变,却无法通知this.items 改变。
后面使用了ko.pureComputed
完美解决这个问题。
viewmodel(params){
this.items = ko.pureComputed(function(){
return items = vm.getitems(typeno);
}
}