【发布时间】:2016-07-24 08:10:29
【问题描述】:
我需要确保每个 observable 都是有效的,还要确保所有 observable 一起有效。在我的简化示例中,我有一个 modelNumber 和 stockNumber,它们都是必需的,但它们一起也必须形成一个有效的 partNumber。我的尝试给了我这个错误:
“未捕获的错误:无法将值写入 ko.computed,除非您指定 'write' 选项。如果您希望读取当前值,请不要传递任何参数。”
有什么问题?
https://jsfiddle.net/yekr2ov2/18/
// enable validation
ko.validation.init();
ko.validation.rules['partNumberValid'] = {
validator: function(partInfo, otherVal) {
return partInfo.modelNumber() + partInfo.stockNumber() == "m1s1";
},
message: 'part number is invalid'
};
ko.validation.registerExtenders();
function VM() {
var self = this;
self.modelNumber = ko.observable().extend({ required: true });
self.stockNumber = ko.observable().extend({ required: true });
self.vinNumber = ko.observable().extend({ required: true });
self.isPartNumberValid = ko.validatedObservable({
modelNumber: self.modelNumber,
stockNumber: self.stockNumber,
vinNumber: self.vinNumber
}).extend({ partNumberValid: true });
self.message = ko.observable();
self.save = function() {
if (self.isPartNumberValid.isValid()) {
self.message("saved");
}
else {
debugger;
//self.isPartNumberValid.errors.showAllMessages();
self.message("not saved");
}
};
}
ko.applyBindings(new VM());
【问题讨论】:
-
顺便说一句,
ko.validation.group不是您真正想要的吗? -
@Jeroen,差不多。
ko.validation.group会根据每个验证告诉我所有部分是否有效。我还想知道所有部分是否一起构成有效组合。所以,在这样解释之后,我想我有一个答案。
标签: knockout.js knockout-validation