Kendo UI data.model.set失败并带有自定义验证

时间:2014-09-25 02:30:26

标签: kendo-ui kendo-grid

我有一个剑道数据网格,如下所示:

$("#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,但EstimatedItemCostset()的值仍为0。

通过进一步钻取,我发现它是由于数据源中存在自定义验证 conditionalRequired,删除后,一切都很顺利!

但我确实需要验证逻辑,同时明确设置模型的值。

谁能告诉我这个问题的原因是什么,我该如何解决?

任何帮助表示赞赏!谢谢!

EDIT1:

添加一些控制台日志,我发现在set()之后,自定义验证功能再次运行! (并且失败),我不知道是什么再次触发验证...

1 个答案:

答案 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']"))不是你的需要验证。