0

私はExtJSスクリプトに取り組んでいて、ComboBoxを持っています

allowBlank = false

forceSelection = true

リストに、表示テキストを持つデフォルト メッセージとして機能する項目があります。

Please select...

そして価値がない

''

ComboBox で検証を実行すると、trueが返され ます。理由がわかりません。ドキュメントによると、

allowBlank = false

検証では、value.length > 0 のチェックが強制されるため、JS コンソールで独自のテストを行いました。

>> if (thisForm.controlManager.controlArray[2].allowBlanks) { if (thisForm.controlManager.controlArray[2].length >= 0) { true; } false; } else { if (thisForm.controlManager.controlArray[2].length > 0) { true; } false; } 

そしてそれはfalseを返した ので、validateメソッドのバグかもしれないと思ったので、これをやってみました

>> thisForm.controlManager.controlArray[2].validateValue('') 

結果としてこれが真になりました

私が間違っている可能性があること、または値が '' のときにこの検証が false を返すように設定する必要があるかどうかについて、誰もが何らかの考えを持っています。

PS。私もこれを試しました

>> thisForm.controlManager.controlArray[2].validateValue(' ') 

falseである正しい結果を得ました。通常、検証で '' と ' ' が同じ値を返すと予想していたので、これは私を非常に混乱させました。

値を '' に設定することで回避できることはわかっていますが、むしろ '' で動作させたいと考えています。

ありがとう

4

2 に答える 2

2

私はたまたまこの同じ問題に取り組んでしまい、周りを見回した後、Extjsの標準機能をオーバーライドする必要のない解決策を見つけることができました.

基本的に、Ext.form.field.Text の子孫には 'validator' 構成オプションがあり、プログラマーはコンポーネントのカスタム検証関数を指定できます (こちらを参照)。

基本的に、バリデータ関数は getErrors() の開始時に呼び出され、残りのフィールドの標準検証の前に評価されます。バリデータ関数は 1 つの引数 (値) を取り、値が有効な場合は true を返し、そうでない場合はエラー メッセージ文字列を返す必要があります。

私の場合、次の構成が機能しました。

validator: function (value) {
  return (value === '/*Your emptytext text*/') ? "blankText" : true;
}
于 2015-05-29T02:51:18.333 に答える
1

emptyText 構成を使用する必要があります Ext には、フィールドを検証するための次のコードがあります。

validate : function(){
    if(this.disabled || this.validateValue(this.processValue(this.getRawValue()))){
        this.clearInvalid();
        return true;
    }
    return false;
}

getRawValue は次のように定義されます。

getRawValue : function(){
    var v = this.rendered ? this.el.getValue() : Ext.value(this.value, '');
    if(v === this.emptyText){
        v = '';
    }
    return v;
}

したがって、値が空のテキストと等しい場合、返される値は '' です。

于 2013-08-20T15:43:34.827 に答える