2014-09-24 6 views
5

SlickGrid가 주어지면 어떻게하면 을 트리거 할 수 있습니까? 모든 행의 셀의 유효성을 검사 할 수 있습니까? 또는 JavaScript를 사용하여 유효성 검사를 한 번 수행하면 (모든 행의 모든 ​​셀에 대해 사용할 수 있음)?SlickGrid의 모든 행에있는 모든 셀 유효성 검사

유스 케이스는 사용자가 모든 셀을 편집하고 기본값 이외의 값을 제공해야하는 경우로 여기에서 수행해야합니다. 그렇지 않은 경우 기본 유효성 검사 오류 동작을 표시하려고합니다. .

현재 유효성 검사는 편집 된 필드에서만 발생합니다.

+0

당신은 당신이 "작업"이 부분을 위임 할 수있는 다른 프레임 워크를 사용하고 있습니까에 의해 스타일의 실패로 사용할 수 있습니까? 이미 보았 듯이 Slickgrid의 기본 유효성 검사는 값만 매개 변수로 전달되는'editor' 함수의'validate' 함수에만 제한됩니다. 원하는 동작을 달성하기 위해 소스를 수정할 수 있지만 개인적으로이 유형의 유효성 검사를 다른 프레임 워크 (즉 [Knockout Validation] (https://github.com/Knockout-Contrib/Knockout-Validation))에 위임합니다. 비록 내가이 경험을 가진이 조합에 부분적이지만. – Origineil

+0

아니요, 내장 된 SlickGrid 유효성 검사를 계속 사용하는 것이 좋습니다. – jlarson

+0

전체 격자 검증에 대한 [데모 시작] (http://jsfiddle.net/origineil/nLpzjL32/)을 작성했습니다. 'validate' 버튼은 각 데이터 입력에 대해'validator'라고 정의 된 열을 실행합니다. * 기본 유효성 검사 오류 동작 *은 편집기 입력 필드의 종료를 허용하지 않으므로 원하는 오류 처리를 구현해야하는 위치를 나타내는 셀 깜박임을 추가했습니다. 둘째, 어떤 디폴트 값이 될지 모르겠다. 그래서 나는> 0이라는 조건을 가진 숫자만을 사용했다. – Origineil

답변

2

Slickgrid의 기본 유효성 검사는의 validate 기능으로 제한되어 있으며 사용 가능한 validator이 매개 변수로만 전달되는지 확인합니다. 추가 컨텍스트 정보를 제공하려면 사용자 정의 편집기가 필요합니다. 특히 사용자 정의 유효성 검사 기능이 필요합니다.

this.validate = function() { 
    if (args.column.validator) { 
     args.newValue = $input.val() 
     var validationResults = args.column.validator(args); 

     if (!validationResults.valid) { 
      return validationResults; 
     } 
    } 

    return { valid: true, msg: null }; 
}; 

각 열은 다음 기본값에 대해 점검 할 것이다 내에서 검증이 필요한 것 중 하나 편집기에서 오는 새 값 또는 다른 필수 검증 측면과 함께 기존 값.

var Validator = function(args) { 

    //validate the existing value or the incoming editor value 
    var value = args.newValue ? args.newValue : args.item[args.column.field] 
    var result = value > 0 
    return {valid: result} 
} 

전체 표의 유효성을 검사하려면 유효성 검사기의 각 열을보고 각 행을 반복하는 유효성 검사 방법을 제공하십시오. 유효성 검사 결과에 따라 rowIndex -> collection of failures의 관계형 매핑은 네이티브 onValidationError 이벤트로 전달되도록 구축됩니다. 이렇게하면 구독이 오류 존재에 대한 사용자 알림을 처리 할 수 ​​있습니다. 또한, 검증 결과는 providing specific metadata to the grid

var validateColumns = function(args){ 

var failures=[]; 

for (c in columns) { 
    var column = columns[c] 
    if (column.validator) { 
     if(!column.validator({row: args.row, item: args.item, column: column}).valid){ 
     failures.push({columnIndex: c, column: column, rowIndex: args.row, item: args.item}) 
     } 
    } 
} 
return failures; 
} 

grid.validate = function() { 
    var rowFailures = {} 
    for (r in data) { 
    //ignore our metadata provider (if applicable) 
    if(r == 'getItemMetadata'){continue;} 

    var failures = validateColumns({item: data[r], row: r}) 
    if(failures.length > 0){ 
     rowFailures[r] = failures; 
    } 
    } 

    if(Object.keys(rowFailures).length > 0){ 
    grid.onValidationError.notify({"rowFailures": rowFailures}, new Slick.EventData()) 
    } 
    } 

Fiddle