2014-09-25 42 views
0

我有一个剑道数据网格,如下图所示:剑道UI data.model.set失败,定制验证

$("#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()后,自定义验证函数运行一次! (和失败),我不知道是什么再次触发验证,但...

回答

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" } 
      } 
     } 
    }, 

基本conditionalRequired将用于运行所有模型项目,所以你应该返回true如果(input.is(“[name ='UnitPrice']”))不是你需要验证。

+0

谢谢...我在此期间解决它,所以我无法测试它是否正确,但是我认为这是问题的原因!即:我给你一个接受! :) – shole 2014-09-25 09:05:21