聚合多个最大 KO 扩展验证
Aggregate multiple max KO extend validations
我正在使用 ko extend validation 进行验证,
尝试做如下的事情。 ko.extend 不支持同一类型的多个绑定(在本例中为最大值),它只添加第一条规则。
有没有办法用函数有条件地传递参数?或者我唯一的出路是编写自定义验证?
myModel.prop2.extend({
max: {
onlyIf: function () {
var test = myModel.prop1() != undefined &&
myModel.prop1() !== "Percentage";
return test;
},
params: 100000
}
}).extend({
max: {
onlyIf: function() {
return myModel.prop1() != undefined &&
myModel.prop1() === "Percentage";
},
params: 100
}
});
找到解决方案,
.extend({
validation: [{
validator: function (val, someOtherVal) {
if (myModel.prop1()() !== "Percentage") {
return val < someOtherVal;
}
return true;
},
message: "Too big!!!!",
params: 100000
}]
})
我不确定,您真正想要实现的目标是什么。但是我认为您尝试的方式无效。所以,你可能需要使用类似下面的东西,
您可以提供验证器或验证器数组。
var testObj = ko.observable(3).extend({
validation: [{
validator: function (val, someOtherVal) {
return val === someOtherVal;
},
message: 'Must Equal 5',
params: 5
},{
validator: function (val) {
return val !== 8;
},
message: 'Can not be 8',
params: 8
}]
});
Solution 2:
ko.validation.rules['compareTo'] = {
message: "Compare to",
validator: function (val, params) {
if (val === null || params.value() === null)
return params.allowNull;
switch (params.way) {
case "<": return val < params.value();
case "<=": return val <= params.value();
case ">": return val > params.value();
case ">=": return val >= params.value();
default: throw new Error("params is not well defined");
}
}
}
myModel.prop2.extend({ compareTo: {
message:"your message",
params: {
way: ">=",
value: model.otherObs,
allowNull: true
},
onlyIf: function () { /*your test*/ }
}});
希望这对您有所帮助。,
我正在使用 ko extend validation 进行验证, 尝试做如下的事情。 ko.extend 不支持同一类型的多个绑定(在本例中为最大值),它只添加第一条规则。 有没有办法用函数有条件地传递参数?或者我唯一的出路是编写自定义验证?
myModel.prop2.extend({
max: {
onlyIf: function () {
var test = myModel.prop1() != undefined &&
myModel.prop1() !== "Percentage";
return test;
},
params: 100000
}
}).extend({
max: {
onlyIf: function() {
return myModel.prop1() != undefined &&
myModel.prop1() === "Percentage";
},
params: 100
}
});
找到解决方案,
.extend({
validation: [{
validator: function (val, someOtherVal) {
if (myModel.prop1()() !== "Percentage") {
return val < someOtherVal;
}
return true;
},
message: "Too big!!!!",
params: 100000
}]
})
我不确定,您真正想要实现的目标是什么。但是我认为您尝试的方式无效。所以,你可能需要使用类似下面的东西,
您可以提供验证器或验证器数组。
var testObj = ko.observable(3).extend({
validation: [{
validator: function (val, someOtherVal) {
return val === someOtherVal;
},
message: 'Must Equal 5',
params: 5
},{
validator: function (val) {
return val !== 8;
},
message: 'Can not be 8',
params: 8
}]
});
Solution 2:
ko.validation.rules['compareTo'] = {
message: "Compare to",
validator: function (val, params) {
if (val === null || params.value() === null)
return params.allowNull;
switch (params.way) {
case "<": return val < params.value();
case "<=": return val <= params.value();
case ">": return val > params.value();
case ">=": return val >= params.value();
default: throw new Error("params is not well defined");
}
}
}
myModel.prop2.extend({ compareTo: {
message:"your message",
params: {
way: ">=",
value: model.otherObs,
allowNull: true
},
onlyIf: function () { /*your test*/ }
}});
希望这对您有所帮助。,