【问题标题】:viewModel.errors is not a function, knockout validationviewModel.errors 不是函数,淘汰验证
【发布时间】:2018-02-21 11:35:42
【问题描述】:

我正在尝试复制此代码

http://jsfiddle.net/KHFn8/5424/

我的代码

<script type="text/javascript">
ko.validation.rules.pattern.message = 'Invalid.';
ko.validation.init({
    registerExtenders: true,
    messagesOnModified: true,
    insertMessages: true,
    parseInputAttributes: true,
    messageTemplate: null
}, true);

  function person(mname, role, memail, mphone) {
  var self = this;

  self.validateNow = ko.observable(false);
  this.mname = ko.observable(mname);
  this.role = ko.observable(role);
  this.memail = ko.observable(memail);
  this.mphone = ko.observable(mphone);
  this.fullName = ko.pureComputed(function() {
    return  self.mname() + " " + "|" + " " + self.role() + " " + "|" + " " + self.memail() + " " + "|" + " " + self.mphone();}, this);
  this.click = function(){}
}

function viewModel() {
  this.mname = ko.observable('').extend({minLength: 2})
  this.role = ko.observable('');
  this.memail = ko.observable('');
  this.mphone = ko.observable('');
  this.people = ko.observableArray();
  this.add = function(){
        if (viewModel.errors().length === 0) {
    self.people.push(new person(self.mname(), self.role(), self.memail(), self.mphone()));
    self.mname(null);
    self.role(null);
    self.memail(null);
    self.mphone(null);
    } else {
      alert('Please check your submission.');
      viewModel.errors.showAllMessages();
    }

  }
  this.remove = function(row){
    self.people.remove(row);
  }
}

var myviewModel = new viewModel();

$(document).ready(function() {
  ko.applyBindings(myviewModel);
});

</script>

我要做的就是在添加之前将文本输入字段mname 设为必需。就这样。但它一直在说

add_club.php:354 Uncaught TypeError: viewModel.errors is not a function
    at viewModel.add (add_club.php:354)
    at HTMLButtonElement.<anonymous> (knockout-3.4.2.js:90)
    at HTMLButtonElement.dispatch (jquery-3.2.1.min.js:3)
    at HTMLButtonElement.q.handle (jquery-3.2.1.min.js:3)
add @ add_club.php:354
(anonymous) @ knockout-3.4.2.js:90
dispatch @ jquery-3.2.1.min.js:3
q.handle @ jquery-3.2.1.min.js:3

基本上这条线给出了错误

 if (viewModel.errors().length === 0)

我正在使用淘汰赛版本 3.4.2 和淘汰赛验证版 2.0.3 以及许多 jquery 库和 jquery 版本 3.2.1。所以我使用的是每个库的最新版本。

错误在于淘汰赛验证,其余的在我尝试使用之前工作得很好。

【问题讨论】:

    标签: javascript jquery knockout.js knockout-validation


    【解决方案1】:

    错误告诉你 viewModel.errors 不是一个函数。

    如果不知道“错误”对象是什么,就很难给出准确的答案。我只知道它不是一个函数,所以你不能调用它(比如 viewModel.errors())。检查该对象以确定它实际上是什么。如果它是一个数组,那么你可以简单地调用访问“长度”属性

    更新:

    查看 JSFiddle,他们正在像这样设置错误对象

    viewModel.errors = ko.validation.group(viewModel);
    

    在底部。我在你的代码中没有看到。

    【讨论】:

    • 好吧,现在它给了Uncaught TypeError: Cannot read property 'length' of undefined,所以我会尝试删除长度,看看它是否有效,奇怪的是我直接从他们的官方代码中复制了sn-p
    • 这意味着“错误”是未定义的,可能是因为它从未被设置。看看我更新的答案
    猜你喜欢
    • 2012-02-18
    • 2011-08-09
    • 2012-11-04
    • 2013-05-16
    • 1970-01-01
    • 2016-02-17
    • 2013-12-21
    • 2017-01-27
    相关资源
    最近更新 更多