2012-08-13 3 views
1

필자는 필자의 열 중 하나에 대해 requiredFieldValidator를 구성했으며 기존 행에 대해 예상대로 작동합니다. Tab 키를 누르거나 클릭하여 새 행 편집을 시작하면 열 밖으로 이동할 때 유효성 검사기가 실행되지 않습니다. 새 행을 열 (행에 데이터가없는)에서 커밋하도록 이동 한 다음 행으로 다시 이동하면 이제 유효성 검사기가 작동하지만 ... 편집기에 일부 데이터를 넣은 다음 삭제하면됩니다.Slickgrid의 새 행 Validator가 실행되지 않습니다.

즉, 새 행의 경우 열에 실제로 입력 할 때까지 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; 

DEFAULTVALUE 처음 interraction 동안 설정되지 않은 어떤 이유로, 당신이 그것을 초기화하면 내 생각 ""당신은 정의를 점검 할 필요가 없습니다 것입니다.

어쨌든 defaultValue는 셀의 이전 값을 보유하므로 비어 있고 편집되는 첫 번째 셀이면 정의되지 않은 나머지 빈 셀에는 모두 ""로 설정됩니다.

이 함수는 셀 편집기가 입력을 확인하기 위해 값이 변경되었다는 사실을 그리드에 알려줘야하는 것이 문제입니다. 제공된 구현에서 표현식은 항상 false를 반환합니다.

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

즉, defaultValue는 계속 정의되지 않습니다.

호프는 의미가 있으며 내 코드는 도움이됩니다.

0

같은 문제가 있었는데 이상적으로 defaultValue가 초기화되지 않았을 때 undefined 또는 null로 설정되어야한다고 생각합니다. 후속하는 방법으로 그래서 내가 수정 한 문서 편집기 :

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

로마인이 처음이면 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

이 값이 모두 ""인지 확인합니다. 나는 validator가 "required"validator가 될 수 있기 때문에 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); 
}; 

선호하는 방법은 사용자 지정 편집기를 만들어서 코어 라이브러리를 사용하지 않는 것입니다.