【问题标题】:Error when trying to reset knockout observable尝试重置可观察到的淘汰赛时出错
【发布时间】:2015-06-26 01:47:27
【问题描述】:

在搜索互联网时,作为我的视图模型一部分的以下代码应该可以正常工作:

function MyViewModel() {
var self = this;

self.name = ko.observable();
self.displayname = ko.observable();
self.description = ko.observable();

self.save = function () {
    $.post('/My/MVCControler',
        { Name: self.name(), DisplayName: self.displayname(), Description: self.description() },
        function success(data) {

            self.name(null);
            self.displayname(null);
            self.description(null);

            $('#MyDialog').modal('hide');
        });
}
}

但是我在Name: self.name() 收到错误Uncaught TypeError: string is not a function

最终目标是在表单提交时重置视图模型。作为最佳实践,我还希望只调用一次 ko.applyBindings。

编辑:在得到很好的回答后,我意识到 this.name 是由我的代码以外的某个地方的字符串创建的。更改变量名称解决了这个问题。

【问题讨论】:

  • 您确定您没有在其他地方无意中为它分配了一个字符串吗?发布的代码看起来不错。
  • 你试过了吗:self.name('');???
  • 我确实尝试过self.name('')。仍然不确定发生了什么。

标签: knockout.js


【解决方案1】:

您必须在代码中的其他位置重置 self.name。您提到您已尝试设置 self.name = '' - 代码还在吗?因为如果是这样,您将覆盖可观察对象,并将其设置为字符串(因此会出现“字符串不是函数”的错误消息)。

查看您的代码(或在此处发布其余代码),并确保您没有在其他地方设置 self.name = [anything]

【讨论】:

  • 好吧,这不是我,而是正在发生的事情。看起来我不能使用名称作为变量。
  • @WindRaven 根据您声明视图模型的方式,您可能开始与全局 window.name 发生冲突
  • @JamesThorpe 感谢您的研究点。经过一些快速研究后,看起来确实是这样。
  • @WindRaven 这似乎表明您可能没有正确声明/实例化您的视图模型,因为使用 name 作为对象的属性名称应该没有问题
  • @JamesThorpe 早些时候我编辑以包含我正在使用的确切代码。我肯定会进行更多研究,感谢您为我指明正确的方向。
猜你喜欢
  • 2015-10-05
  • 2023-03-11
  • 2014-11-05
  • 2012-09-08
  • 2012-07-07
  • 2015-01-25
  • 1970-01-01
  • 2018-03-30
相关资源
最近更新 更多