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

标签 javascript arrays knockout.js

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

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/

相关文章:

javascript - 如何在javascript中将嵌套集转换为嵌套数组?

javascript - 阻止 UIWebView 警报

javascript - 渐进式WA : Do we have to add links to manifest to the header section of all website pages?

arrays - 用于返回电子邮件数组的 Ruby 类方法

javascript - 在javascript中过滤嵌套的json

c# - MVC 4 动态操作方法参数

javascript - Knockoutjs foreach 第三个嵌套级别不起作用

knockout.js - Google Chart API 的 knockout 自定义绑定(bind) - 访问被拒绝

javascript - Bootstrap 表如何隐藏,当使用 javascript 切换可见时它无法正确显示

javascript - 如何在javascript中的回调中获取变量