我有一个可观察数组,如下所示
appViewModel.rollArray = ko.observableArray([{
diceAmount: ko.numericObservable(1),
diceType: ko.observable(null),
diceAddition: ko.numericObservable(0),
diceMultiplication: ko.numericObservable(1)
}]);
还有一些绑定(bind)正在监视这些属性,如下所示
<input type="number" data-bind="value: rollArray()[rollIndex()].diceAmount" />
这个数组在 Web 应用程序中被填充并发生了很大的变化,但我需要一个“重置”按钮。这会将 appViewModel.rollArray 恢复为其默认状态(如我上面所定义的)。问题是,如果我只是重新定义 rollArray,那么所有绑定(bind)都将停止运行。同样,如果我尝试从 rollArray 中执行removeAll(),然后插入默认值的对象,则在removeAll之后立即通知绑定(bind)并生成错误,因为它们无法在数组内找到这些属性。
有什么好的方法可以解决这个问题吗?
当前解决方案
这并不优雅(因此我在这里询问的原因),但目前我只是将一个新元素推送到修改后的数组上,然后拼接其他所有内容。
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);
最佳答案
您可以重新分配数组值,而不是推送/拼接:
appViewModel.rollArray([{
diceAmount: ko.numericObservable(1),
diceType: ko.observable(null),
diceAddition: ko.numericObservable(0),
diceMultiplication: ko.numericObservable(1)
}]);
关于javascript - Knockout - 重置可观察的可观察数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31439995/