viewModel.errors不是函数,敲除验证
viewModel.errors is not a function, knockout validation
我正在尝试复制此代码
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)
我正在使用 knockout 版本 3.4.2 和 knockout 验证版本 2.0.3 以及许多 jquery 库和 Jquery 版本 3.2.1。所以我使用的是每个库的最新版本。
错误是敲除验证,在我尝试使用它之前,其余的工作正常。
错误告诉您 viewModel.errors 不是一个函数。
在不知道 "errors" 对象是什么的情况下,很难给出准确的答案。我唯一确定的是它不是一个函数,所以你不能调用它(比如 viewModel.errors())。检查该对象以确定它实际上是什么。如果它是一个数组,那么你可以简单地调用访问 "length" 属性
更新:
查看 JSFiddle,他们正在像这样设置错误对象
viewModel.errors = ko.validation.group(viewModel);
在底部。我在你的代码中没有看到这一点。
我正在尝试复制此代码
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)
我正在使用 knockout 版本 3.4.2 和 knockout 验证版本 2.0.3 以及许多 jquery 库和 Jquery 版本 3.2.1。所以我使用的是每个库的最新版本。
错误是敲除验证,在我尝试使用它之前,其余的工作正常。
错误告诉您 viewModel.errors 不是一个函数。
在不知道 "errors" 对象是什么的情况下,很难给出准确的答案。我唯一确定的是它不是一个函数,所以你不能调用它(比如 viewModel.errors())。检查该对象以确定它实际上是什么。如果它是一个数组,那么你可以简单地调用访问 "length" 属性
更新:
查看 JSFiddle,他们正在像这样设置错误对象
viewModel.errors = ko.validation.group(viewModel);
在底部。我在你的代码中没有看到这一点。