我有一个带有可观察的子视图模型数组的视图模型。
这些应该是用户可排序的,所以我使用的sort()
方法是observableArray
:
function ViewModel() {
this.items = ko.observableArray([/* ... some items ... */]);
this.sort = function () {
this.items.sort(function (a, b) {
// comparison
}
}
}
每个项目都有一个type
可观察的,通过绑定绑定到单选框列表checked
。
<li>
<input type="radio" value="A" data-bind="checked: type" /> A
<input type="radio" value="B" data-bind="checked: type" /> B
<input type="radio" value="C" data-bind="checked: type" /> C
<input type="radio" value="D" data-bind="checked: type" /> D
</li>
现象是当items
数组被排序时,单选框随机丢失它们的状态,即对于它们的看似随机的子集,屏幕上看不到任何点——即使它们的值仍然保留在视图模型中。
自己试试:http: //jsfiddle.net/yxg53bph/——点击“排序”几次,观察效果。
简单的问题:这里出了什么问题,我该如何解决?
排序后调用notifySubscribers()
单个项目修复了显示问题。然而,这是一个黑客,而不是一个解决方案。