Javascript 淘汰自定义计算的验证规则
我创建了一个自定义函数,如下所示。它在存储数据和更新可观察到的元数据值等时运行良好,但在进行验证时会中断 我正在使用敲除验证,并且已经调试了几个小时,我想我发现了一个事实,验证运行了两次,第二次,我的可观察对象的所有规则都被删除了,所以每次可观察对象都是有效的,因为没有规则。后面的代码复制自以下源代码: 为什么我的自定义函数会使可观察的对象放弃验证规则 我的自定义功能Javascript 淘汰自定义计算的验证规则,javascript,validation,knockout.js,Javascript,Validation,Knockout.js,我创建了一个自定义函数,如下所示。它在存储数据和更新可观察到的元数据值等时运行良好,但在进行验证时会中断 我正在使用敲除验证,并且已经调试了几个小时,我想我发现了一个事实,验证运行了两次,第二次,我的可观察对象的所有规则都被删除了,所以每次可观察对象都是有效的,因为没有规则。后面的代码复制自以下源代码: 为什么我的自定义函数会使可观察的对象放弃验证规则 我的自定义功能 ko.observable.fn.valueByKey = function (key) { return ko.com
ko.observable.fn.valueByKey = function (key) {
return ko.computed({
read: function () {
var md = ko.utils.arrayFirst(ko.unwrap(this), function (item) {
return item.Key() == key;
});
if (md === null) {
md = new MetaData({ Key: key });
this.push(md);
}
return md.Value();
},
write: function (value) {
var md = ko.utils.arrayFirst(ko.unwrap(this), function (item) {
return item.Key() == key;
});
md.Value(value);
}
}, this);
};
运行两次的代码
var h_obsValidationTrigger = ko.computed(function () {
var obs = observable(),
ruleContexts = observable.rules();
console.log(ruleContexts);
exports.validateObservable(observable);
return true;
});
淘汰验证的另一个重要部分js
addRule: function (observable, rule) {
observable.extend({ validatable: true });
//push a Rule Context to the observables local array of Rule Contexts
observable.rules.push(rule);
return observable;
},
更新1:
我想出了一个简单的解决方案,几乎可以奏效
ko.observable.fn.valueByKey = function (key) {
var md = ko.utils.arrayFirst(ko.unwrap(this), function (item) {
return item.Key() == key;
});
if (md === null) {
md = new MetaData({ Key: key });
this.push(md);
}
return md.Value;
}
使用此选项时,我会收到元素的验证消息,但我的视图模型上的错误计数不会增加,因此视图模型本身仍然有效,即使我收到验证错误。你能帮忙吗?下面是我的问题的解决方法:我已将max设置为24,但你们仍然可以用键盘写58,而验证并没有告诉你们为什么要直接在输入上定义最小值和最大值?你指的这个例子是从哪里来的?我用一个工作例子更新了我的小提琴,它使用了一个“正常”的可观察的,而不是一个自定义的,它就像一个符咒一样工作。