我有一个剑道数据网格,如下所示:
$("#Grid").kendoGrid({
save: function (data) {
if (data.values.UnitPrice !== undefined) {
if(data.values.UnitPrice == null || data.values.UnitPrice == 0){
data.model.set("EstimatedItemCost", 0);
}
else{
console.log(data.values.UnitPrice * data.model.Quantity);
var test = data.model.set("EstimatedItemCost", data.values.UnitPrice * data.model.Quantity);
}
}
this.refresh();
},
....//other config
它正在使用带有一点自定义验证的数据源
var tdata = new kendo.data.DataSource({
schema: {
model: {
fields: {
UnitPrice: {
type: "number",
validation:{
min: 0,
conditionalRequired: function(input){
if(input.is("[name='UnitPrice']")){
input.attr("data-conditionalRequired-msg", "Unit Price is required");
//Some logic, without changing the result, simply return true
return true;
}
}
},
},
EstimatedItemCost: { type: "number" },
Remarks: { type: "string" }
}
}
},
好的,现在这里是对问题的描述:
data.model.set("EstimatedItemCost", data.values.UnitPrice * data.model.Quantity);
不设置EstimatedItemCost
的值,无论如何都保持为0.
即:console.log(data.values.UnitPrice * data.model.Quantity);
已显示有效数字,例如200,但EstimatedItemCost
后set()
的值仍为0。
通过进一步钻取,我发现它是由于数据源中存在自定义验证
conditionalRequired
,删除后,一切都很顺利!
但我确实需要验证逻辑,同时明确设置模型的值。
谁能告诉我这个问题的原因是什么,我该如何解决?
任何帮助表示赞赏!谢谢!
EDIT1:
添加一些控制台日志,我发现在set()
之后,自定义验证功能再次运行! (并且失败),我不知道是什么再次触发验证...
答案 0 :(得分:1)
您的验证错误,它应该看起来像这样
var tdata = new kendo.data.DataSource({
schema: {
model: {
fields: {
UnitPrice: {
type: "number",
validation:{
min: 0,
conditionalRequired: function(input){
if(input.is("[name='UnitPrice']")){
input.attr("data-conditionalRequired-msg", "Unit Price is required");
//Some logic, without changing the result, simply return true
return true;
}else{
return false;
}
return true;
}
},
},
EstimatedItemCost: { type: "number" },
Remarks: { type: "string" }
}
}
},
basicRequired基本上会为你的所有模型项运行,所以你应该返回true if(input.is(" [name =' UnitPrice']"))不是你的需要验证。