【问题标题】:Knockout JS removeAll() fails the second time it is calledKnockout JS removeAll() 第二次调用失败
【发布时间】:2014-01-17 04:03:53
【问题描述】:

在我的视图模型中,我有几个方法可以重置可观察数组中的数据。当我第一次单击调用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”按钮会导致与再次单击“New Game”相同的错误。

我可以做些什么来获得这个功能?

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    self.library 最初是一个 observableArray,但是您的重置会将其变成一个普通数组。相反,只需设置现有 observable 的值。

    换行

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 2021-04-02
      • 2010-12-21
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      相关资源
      最近更新 更多