4

TimeFieldを使用して有効な時間要素のみをユーザーに表示するExtJSがあります。これは問題なく機能しますが、ユーザーがすべての時間要素を再び表示できるように、をリセットするにはどうすればよいですか?setMinValue(...)setMaxValue(...)minValuemaxValue

フィールドをクリアしたくありません。ストアのすべての要素をもう一度表示します。

4

4 に答える 4

5

これを達成するための「クリーンな」方法はわかりませんが、より適切なものが見つかるまで一時的な回避策があります。

TimeField'sminValuemaxValuetoundefinedまたはを設定してから、TimeFieldnullを呼び出しgenerateStore()てみてください。

    // private
    generateStore: function(initial){
        var min = this.minValue || new Date(this.initDate).clearTime(),
            max = this.maxValue || new Date(this.initDate).clearTime().add('mi', 
                        (24 * 60) - 1),
            times = [];

        while(min <= max){
            times.push(min.dateFormat(this.format));
            min = min.add('mi', this.increment);
        }
        this.bindStore(times, initial);
    },

はい、これはプライベートメソッドなので、通常は使用しないでください。ただし、minValueまたはmaxValueをリセットするだけでメソッドが呼び出されるので、手順をスキップするだけです。両方のプロパティをnullに設定すると、の宣言var min, max =はデフォルトと同じになります。これを呼び出すことによって、setMinValue()またはsetMaxValue()メソッドに渡した値からDateを解析しようとするプライベートメソッドを使用するためにこれを行うことはできません(nullの解析に失敗します):

    // private
    setLimit: function(value, isMin, initial){
        var d;
        // will fail here
        if(Ext.isString(value)){
            d = this.parseDate(value);
        // will fail as well
        }else if(Ext.isDate(value)){
            d = value;
        }
        // will never make it here, because 'd' wasn't set above
        if(d){
            var val = new Date(this.initDate).clearTime();
            val.setHours(d.getHours(), d.getMinutes(), d.getSeconds(),
                         d.getMilliseconds());
            this[isMin ? 'minValue' : 'maxValue'] = val;
            if(!initial){
                this.generateStore();
            }
        }
    }

アップデート:

よりクリーンなアプローチは、上記を実現TimeFieldするメソッドを拡張して追加するresetMinAndMaxか(minValue / maxValueをnullに設定するか、ストアを生成するために呼び出す)、またはオーバーライドでメソッドを追加することです。generateStore()そうすれば、どこでも「プライベート」に電話をかけることを避けることができます。

于 2011-01-27T12:14:22.563 に答える
3

簡単に使用できます

this.setMinValue(false);

幸運を

于 2014-08-07T13:56:19.713 に答える
1

extjsはコンポーネントからプロパティ「value」をリセットするだけです(私が間違っていない場合)、まあ、私のコードがより良い方法かどうかはわかりませんが、上記の答えのように、私はからのリセットメソッドをオーバーライドしますFieldクラスのコードを使用してDateFieldクラスを作成し、元の値(originalMinValueおよびoriginalMaxValue)を保持するためにさらに2つのプロパティを追加します。

originalMinValueとoriginalMaxValueは、日付フィールドのRenderイベントで開始されます。

this.setValue = this.setValue.createSequence(this.updateHidden);
this.originalMinValue = this.minValue;
this.originalMaxValue = this.maxValue;
// this is part of me onRender event code

それがオーバーライドです

Ext.override(Ext.form.DateField,{   
originalMinValue : null,
originalMaxValue : null,
reset : function() {                
    this.setValue(this.originalValue);      
    this.setMinValue(this.originalMinValue);
    this.setMaxValue(this.originalMaxValue);
    this.clearInvalid();        
}

})

このようにして、コンポーネントのリセットメソッドe thenを使用して、value、minValue、およびMaxValueを元のValueに戻すことができます。

私の悪い英語でごめんなさい。

于 2011-08-18T19:32:11.727 に答える
0

ページが読み込まれるときのタイムフィールドの初期値を超えていますか?その場合は、FIELDクラスのreset()メソッドを使用できるはずです。タイムフィールドコンポーネントはFIELDから拡張されているため、これにアクセスできるはずです。

于 2011-01-27T15:49:14.023 に答える