Knockout JS removeAll()在第二次调用时失败

时间:2014-01-16 18:05:17

标签: javascript knockout.js

在我的视图模型中,我有几种方法可以重置可观察数组中的数据。我第一次单击调用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,因此可以看到整个视图模型。如果您第一次点击“新游戏”按钮,一切都能正常运行。您也可以单击“绘制卡片”按钮,它也可以正常运行。但是,单击“Mulligan”按钮会导致与再次单击“新游戏”相同的错误。

我能做些什么来实现这个功能?

1 个答案:

答案 0 :(得分:2)

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

替换

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

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