【发布时间】:2015-10-05 01:26:22
【问题描述】:
我有一个可观察的可观察数组,如下所示
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 应用程序中被填充和改变了很多,但我需要一个“重置”按钮。这会将 appViewModel.rollArray 恢复到其默认状态(如我在上面定义的)。问题是,如果我简单地重新定义 rollArray,那么绑定都将停止工作。同样,如果我尝试从 rollArray 执行 removeAll() 然后推入默认值的对象,则绑定会在 removeAll 之后立即通知并生成错误,因为它们无法在数组中找到这些属性。
有解决这个问题的好方法吗?
当前解决方案
它并不优雅(这也是我在这里提出问题的原因),但目前我只是将一个新元素推送到修改后的数组上,然后将其他所有内容拼接起来。
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);
【问题讨论】:
标签: javascript arrays knockout.js