我有一个可观察的可观察数组,如下所示
appViewModel.rollArray = ko.observableArray([{
diceAmount: ko.numericObservable(1),
diceType: ko.observable(null),
diceAddition: ko.numericObservable(0),
diceMultiplication: ko.numericObservable(1)
}]);
正在观察这些属性的绑定,例如以下
<input type="number" data-bind="value: rollArray()[rollIndex()].diceAmount" />
这个数组在Web应用程序中得到了很大的填充和更改,但是我需要一个&#34; reset&#34;按钮。这会将appViewModel.rollArray恢复到默认状态(如上所述)。问题是,如果我只是重新定义rollArray,那么绑定都将停止运行。同样,如果我尝试从rollArray执行removeAll()然后插入默认值的对象,则在removeAll之后立即通知绑定并生成错误,因为它们无法在数组内找到这些属性。
有解决这个问题的好方法吗?
当前解决方案
它不优雅(因此我在这里询问SO的原因)但是目前我只是将一个新元素推到修改后的数组上,然后将其他所有内容拼接掉。
appViewModel.rollArray.push({
diceAmount: ko.numericObservable(1),
diceType: ko.observable(null),
diceAddition: ko.numericObservable(0),
diceMultiplication: ko.numericObservable(1)
});
appViewModel.rollArray.splice(0,appViewModel.rollArray().length-1);
答案 0 :(得分:2)
您可以重新分配数组值,而不是推/拼接:
appViewModel.rollArray([{
diceAmount: ko.numericObservable(1),
diceType: ko.observable(null),
diceAddition: ko.numericObservable(0),
diceMultiplication: ko.numericObservable(1)
}]);