これにアプローチする最良の方法は、とにかく私の見解では、あなたは別の新しいカスタムエディタとしてslick.editor.js
に追加しますあなた自身のエディタをコーディングすることです。このファイルも作成されています。私は正規表現テストを実装し、それは素晴らしい動作します。
Regexだけでなく、さまざまな条件タイプにも対応している新しいエディタがあります。たとえば、min:2
というオプションは最小数2が必要ですが、minLength:2
は入力が少なくともString 2文字など...あなたが実際に探しているものは、コード定義pattern
になります。 だから、基本的に、あなたはslick.editor.js
内でこのコードを含める必要があります:
ConditionalCellEditor : function(args) {
var $input;
var defaultValue;
var scope = this;
var condObj = null;
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.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.applyValue = function(item,state) {
item[args.column.field] = state;
};
this.isValueChanged = function() {
return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue);
};
this.validate = function() {
var condObj = args.column.editorOptions;
var returnMsg = null;
var returnValid = true;
if(typeof condObj.min != 'undefined') {
if(parseFloat($input.val()) < parseFloat(condObj.min)) {
returnMsg = "Value should not be less then "+condObj.min;
returnValid = false;
}
}
if(typeof condObj.max != 'undefined') {
if(parseFloat($input.val()) > parseFloat(condObj.max)) {
returnMsg = "Value should not be over "+condObj.max;
returnValid = false;
}
}
if(typeof condObj.minLength != 'undefined') {
if($input.val().length < condObj.minLength) {
returnMsg = "Value length should not be less then "+condObj.minLength;
returnValid = false;
}
}
if(typeof condObj.maxLength != 'undefined') {
if($input.val().length > condObj.maxLength) {
returnMsg = "Value length should not be over "+condObj.maxLength;
returnValid = false;
}
}
if(typeof condObj.pattern != 'undefined') {
if(condObj.pattern.test($input.val()) != true) {
returnMsg = (condObj.msg) ? condObj.msg : "Value is invalid following a regular expression pattern";
returnValid = false;
}
}
if(typeof condObj.required != 'undefined') {
if($input.val().length == "" && condObj.required) {
returnMsg = "Required field, please provide a value";
returnValid = false;
}
}
// Now let's return our boolean results and message if invalid
return {
valid: returnValid,
msg: returnMsg
}
};
this.init();
},
その後、私のSlickGrid列の定義内で、私は私が定義した新しいエディタを呼び出すと、私はANに合格することを決めたいくつかのオプションを渡していますeditorOptions
をObjectとして使用することで、必要なオプション、パターン、msg、minLengthなどをすべて柔軟に追加できます。私の例は、電子メールの正規表現パターンの検証です。
columns1 = [
...
{id:"email", field:"email", name:"[email protected]", width:145, editor:ConditionalCellEditor, editorOptions:{pattern:/^([0-9a-zA-Z]+([_.-]?[0-9a-zA-Z]+)*@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$/, msg:"Must be a valid email"} },
...];
ボイルラは、チャームのように動作します。 私の新しいConditionalCellEditor
エディタは私にはるかに柔軟性があるので、私はもうeditor:TextCellEditor
をほとんど使用していません。それが助けてくれることを願います。
を、あなたが編集できますあなたが何かを渡すこと。バリデーション設定オブジェクトをargs.columnに追加して、$ inputではなくargs.column.validatorの2番目のパラメータに渡すようにします。 –
はそれを手に入れませんでした。 'slick.editors.js'には標準のバリデーターがあります。私は自分自身を指定する必要がありますか? 'validator:requiredFieldValidator'の代わりにコードがどのように見えるか –
デフォルトでは、slickGridは入力の値をカスタムバリデータメソッドに渡すだけなので、' args.column.validator($ input.val()); 'は現在その値を 'requiredFieldValidator'に渡すだけです。あなたは 'validator:requiredFieldValidator'のように見えますが、' function requiredFieldValidator(value、input) 'を参照します。 正規表現を入力の属性として最初に定義したければなりません。 –