Knockout - 重置可观察的可观察数组

时间:2015-07-15 20:05:07

标签: javascript arrays knockout.js

我有一个可观察的可观察数组,如下所示

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);

1 个答案:

答案 0 :(得分:2)

您可以重新分配数组值,而不是推/拼接:

appViewModel.rollArray([{
    diceAmount: ko.numericObservable(1),
    diceType: ko.observable(null),
    diceAddition: ko.numericObservable(0),
    diceMultiplication: ko.numericObservable(1)
}]);