2014-09-18 1 views
3

SlickGrid의 일부 열에 사용자 정의 열 속성을 추가하고 싶습니다. 정규식을 사용하여 입력을 확인하는 사용자 지정 편집기가 있습니다. 나는 그들 각각에 대해 동일한 편집기를 사용할 수 있고 그 (것)들에게서 유일한 regex 계산서를 움켜 잡을 수있다 그래야 나의 란에 정규식 계산서 속성을 추가하고 싶으면. 나는 열이 같은 싶지 : 내 유효성 검사 기능이 뭔가를 할 수 있다면SlickGrid에서 사용자 정의 열 속성 추가하기

var columns = [{ id: "id", name: "#", field: "id", cssClass: "cell-title", resizeable: true, sortable: true }, 
      { id: "upc", name: "UPC", field: "upc", resizable: true, sortable: true, editor: regexValidationEditor, regex: /^[a-zA-Z0-9 ]{0,20}$/ }, 
      { id: "price", name: "Price", field: "price", resizable: true, sortable: true, editor: regexValidationEditor, regex: /^\d*\.?\d{0,3}$/ }]; 

다음을 :

분명히
function regexValidationEditor(args) { 
    var $value; 
    var inputBox = "<INPUT class='customInput' type=text />"; 
    var scope = this; 

    this.init = function() { 
     $value = $(inputBox) 
     .appendTo(args.container); 

     scope.focus(); 
    }; 

    this.validate = function() { 
     if (!args.column.regex.test($value.val())) { 
      return { valid: false, msg: "Invalid Data Entry" }; 
     } 
     return { valid: true, msg: null }; 
    }; 

    this.init(); 
} 

,이 작동하지 않지만, 라인을 따라입니다 내가하고 싶은 일의.

+1

나는 유효성 검사가 실패 할 경우 각 열 레코드 기록을 설명 메시지를 포함한다고 생각합니다. – sln

+1

질문을 제대로 이해할 수 없지만 Regex 편집기/유효성 검사기를 찾고 계십니까? 그게 당신이 찾고있는 경우 다음 제발 아주 비슷한 질문에 만든 대답을 봐주세요 http://stackoverflow.com/a/9301137 ... 그게 아니라면, 당신은 조금 더 설명해 주시겠습니까 . 희망이 도움이됩니다. 당신은 항상 다른 대답에 투표 할 수 있습니다, 또는 나는 대답도 여기에 다시 복사 할 수 있습니다 :) – ghiscoding

+0

@ 그것이 그 것이다! 내가 칼럼에 넣으면 커스텀 필드에 접근하는 방법을 잘 모르겠다. 그러나 args.column.editorOptions를 통해 이들을 얻었음을 알았다. –

답변

2

열 정보는 사용자가 정의하는대로 이동하므로 사용자 지정 속성이 나타납니다. 필요한 모든 것을 제공하십시오 editor functions 및 유효성 검사가 작동합니다.

Fiddle

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

    this.init = function() { 
    $input = $("<INPUT type=text class='editor-text' />") 
     .appendTo(args.container) 
     .bind("keydown.nav", function (e) { 
     if (e.keyCode === $.ui.keyCode.LEFT || e.keyCode === $.ui.keyCode.RIGHT) { 
      e.stopImmediatePropagation(); 
     } 
    }) 
     .focus() 
     .select(); 
    }; 

    this.validate = function() { 
    if (!args.column.regex.test($input.val())) { 

     return { 
      valid: false, 
      msg: "Invalid Data Entry" 
     }; 
    } 
    return { 
     valid: true, 
     msg: null 
    }; 
    }; 

    this.applyValue = function (item, state) { 
    item[args.column.field] = state; 
    }; 

    this.destroy = function() { 
    $input.remove(); 
    }; 

    this.focus = function() { 
    $input.focus(); 
    }; 

    this.getValue = function() { 
    return $input.val(); 
    }; 

    this.setValue = function (val) { 
    $input.val(val); 
    }; 

    this.loadValue = function (item) { 
    defaultValue = item[args.column.field] || ""; 

    $input.val(defaultValue); 
    $input[0].defaultValue = defaultValue; 
    $input.select(); 
}; 

this.serializeValue = function() { 
    return $input.val(); 
}; 

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

scope.init(); 
} 
+0

그게 다야! 나는 재산을 얻기 위해 args.column을 거쳐야 만합니다. –

관련 문제