2012-08-13 48 views
1

我爲我的某個列配置了requiredFieldValidator,並且它對現有行的預期工作。當我通過選項卡時,或者單擊開始編輯新行時,驗證器在離開列時不會觸發。當移出新行(列中沒有數據)以便提交時,然後移回行時,現在驗證程序正常工作......但是隻有在編輯器中放入了一些數據,然後刪除它時才行。slickgrid中的新行,驗證器不會觸發

換句話說,對於新行,requiredFieldValidator在我實際在列中輸入內容之前不會執行任何操作。如果我留下一個空白欄它永遠不會開火,擊敗它的目的。有趣的是,他們提供的示例(http://mleibman.github.com/SlickGrid/examples/example3-editing.html)顯示了同樣的問題。

回答

0

我同意,剛剛遇到這種行爲我自己。 這裏是解決方案。

將this.isValueChanged函數內容更改爲以下內容。

if(($input.val().length > 0) && ($input.val() != defaultValue)) 
      return true; 
    else if(($input.val() == defaultValue)&&($input.val().length > 0)) 
      return true; 
    else if(($input.val().length == 0) && ((undefined === defaultValue)||(defaultValue == ""))) 
      return true; 
    else 
      return false; 

出於某種原因,默認值第一interraction期間未設置,如果你初始化我的猜測爲「」你不會需要檢查未定義。

無論如何defaultValue保存單元格的前一個值,所以當它是空的並且它是第一個被編輯的單元格時,它是未定義的,之後它被設置爲「」所有其他空單元格。

問題是這個函數需要告訴網格該值已經改變,以便單元編輯器驗證輸入。在提供的實現中,表達式總是返回false,因爲

$input.val() == "" evaluates to true and then the expression 
!($input.val() == "" && defaultValue == null)) evaluates to false 

這意味着defaultValue是連續未定義的。

希望有道理,我的代碼可以幫助你。

0

有同樣的問題,我相信理想情況下,defaultValue應該設置爲undefined或null,當它沒有被初始化時。所以我用以下方式修改了TextEditor:

function TextEditor(args) { 
    var $input; 
    var defaultValue; 
    var scope = this; 

    this.loadValue = function (item) { 
     defaultValue = item[args.column.field] || null; 
     $input.val(defaultValue); 
     $input[0].defaultValue = defaultValue; 
     $input.select(); 
    }; 

    this.isValueChanged = function() { 
     return $input.val() != defaultValue; 
    }; 

    .... 

設置默認defaultValue爲null並簡化isValueChanged。

0

如果是Roman,在第一個else中有錯誤,則返回值爲false。否則,即使該值未被更改,單元格中的任何更改都會返回true。 我試過這個,它的工作原理。

this.isValueChanged = function() { 
     var attuale = $input.val(); 
     if((attuale.length > 0) && (attuale != defaultValue)) 
      return true; 
     else if((attuale == defaultValue)&&(attuale.length > 0)) 
      return false; 
     else if((attuale.length == 0) && ((undefined === defaultValue)||(defaultValue == ""))) 
      return true; 
     else 
      return false; 
}; 
1

這會檢查兩個值是否爲「」。我相信這應該返回true,因爲驗證器可能是一個「必需的」驗證器。

this.isValueChanged = function() { 
    // this needs to validate if both are empty since a validator might be a "required" validator 
    if ($input.val() == "" && defaultValue == "") 
    return true; 
    else 
    return (!($input.val() == "" && defaultValue == "")) && ($input.val() != defaultValue); 
}; 

首選的方法是創建一個自定義編輯器,這樣你就不會與核心庫混在一起。