2014-09-25 41 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