Javascript 淘汰验证扩展';仅当';可观测参数
是否有一种方法可以扩展一个可观察的对象,使其仅在和可观察的对象为真时才被需要,并且可以跟踪更改 例如,我得到了一个自定义扩展器:Javascript 淘汰验证扩展';仅当';可观测参数,javascript,knockout.js,Javascript,Knockout.js,是否有一种方法可以扩展一个可观察的对象,使其仅在和可观察的对象为真时才被需要,并且可以跟踪更改 例如,我得到了一个自定义扩展器: ko.extenders.requiredOnlyIf = function (target, makeRequired) { target.HasError = ko.observable(); function validate(newValue) { if (makeRequired) { target.HasError(newValu
ko.extenders.requiredOnlyIf = function (target, makeRequired) {
target.HasError = ko.observable();
function validate(newValue) {
if (makeRequired) {
target.HasError(newValue ? false : true);
} else {
target.HasError(false);
}
}
validate(target());
target.subscribe(validate);
return target;
}
这可以观察到:
self.Field1 = ko.observable().extend({ requiredOnlyIf : self.Field2() });
self.Field2 = ko.observable().extend({ requiredOnlyIf : self.Field1() });
这些观察值是相互依赖的,因此,如果一个被填充,另一个也必须被填充。但是,扩展器只有在值第一次绑定时才能正常工作,但当任何可观测值发生更改时,扩展器都无法正常工作。以下几点:
ko.extenders.requiredOnlyIf=函数(目标,makeRequired){
target.HasError=ko.pureComputed(()=>{
const otherHasValue=!!makeRequired();
const targetHasValue=!!target();
返回otherHasValue&!targetHasValue;
});
回报目标;
}
self={};
self.Field1=ko.observable();
self.Field2=ko.observable().extend({
requiredOnlyIf:self.Field1
});
self.Field1.extend({
requiredOnlyIf:self.Field2
});
ko.应用绑定(self)代码>
。无效{
边框颜色:红色;
}
正是我想要的!!谢谢你告诉我关于订阅的事情,在某种程度上,我知道我必须订阅,但不知道如何订阅。非常感谢你。我刚刚意识到这应该是一个合理的选择。代码已更新。