javascript - Knockout JS removeAll() 第二次调用失败

标签 javascript knockout.js

在我的 View 模型中,我有几个方法可以重置可观察数组中的数据。当我第一次单击调用 newGame 方法的按钮时,一切正常。但是,第二次单击该按钮时出现 JavaScript 错误。

    self.newGame = function () {
        // reset the zones
        self.resetBoardState();

        // more stuff here but clipped for brevity ...
    }

    self.resetBoardState = function () {
        // clear all zones...
        self.library.removeAll();

        // place all cards in deck into library ...
        self.library = JSON.parse(JSON.stringify(self.deck));
    }

我在 JavaScript 控制台中遇到的错误是:

Uncaught TypeError: Object [object Array] has no method 'removeAll'

我有一个 JS Fiddle在这里可以看到整个 View 模型。如果您第一次单击“新游戏”按钮,一切都会完美运行。您还可以单击“抽卡”按钮,它的行为也正常。但是,单击“Mulligan”按钮会导致与再次单击“New Game”相同的错误。

我该怎么做才能实现此功能?

最佳答案

self.library 最初是一个 observableArray,但是你的重置将它变成了一个普通数组。相反,只需设置现有可观察量的值即可。

更换线路

self.library = JSON.parse(JSON.stringify(self.deck));

self.library(JSON.parse(JSON.stringify(self.deck)));

关于javascript - Knockout JS removeAll() 第二次调用失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21169485/

相关文章:

javascript - knockoutjs 无法将绑定(bind)应用于不同的 id

javascript - 创建的 observableArray 始终为空

javascript - KnockoutJS 从另一个函数内部调用 ViewModel 函数

javascript - jquery函数不触发

javascript - MCQ 问题格式的 jQuery 和 JavaScript 问题

javascript - 获取选项元素的高度?

css - 在 <li> 悬停时显示 "Finger"就像它的 <a>

javascript - 从库中返回一个对象?

javascript - 如何使用 Node.JS 为静态文件创建文件夹?

javascript - 如何将 list.js 与 Hot Towel 模板一起使用