1

次のプロパティを持つ Ext.form.ComboBox があります。

fieldLabel: 'Regiune',
valueField: 'id',
displayField: 'reg',
id: 'cbRegR',
typeAhead: true,
store: new Ext.data.JsonStore({...}),
mode: 'local',
emptyText: '',
listeners:{...}

問題は、ドロップダウン リストから値を選択してすべてのリスト項目を表示した後、コンボボックスの入力フィールドを手動で削除する必要があることです。問題は、入力フィールドの文字で始まる項目のみがリストに表示されることです。

ドロップダウンリストを展開するときに入力フィールドをクリアするにはどうすればよいですか? 次のことを試しましたが、うまくいきません。

listeners: { 'expand': function() { cbRegR.clearValue(); } }

簡単に思えますが、私にはそうではありません..何か素晴らしいアイデアはありますか? 前もって感謝します。

4

4 に答える 4

3

コンボボックスに構成プロパティを追加する

triggerAction: 'all'

展開イベント ハンドラーを登録したり、コンボボックスの値をクリアしたりする必要なく、このトリックを実行できる可能性があります。

于 2011-01-14T09:33:16.963 に答える
1

すでにご存知のように、フィールド値に基づいてリスト項目をフィルタリングすることは、ExtJSComboBox-esの本質的な動作です。

おそらくexpand()メソッドをオーバーライドして、リストをレンダリングする前に値をクリアするための追加を行うことができます。例えば:

Ext.override(Ext.form.ComboBox, {

    expand : function(){
        if(this.isExpanded() || !this.hasFocus){
            return;
        }
        //ADDITIONS HERE:
        this.clearValue();
        this.doQuery("", true);
        //ADDITIONS END HERE

        if(this.title || this.pageSize){
            this.assetHeight = 0;
            if(this.title){
                this.assetHeight += this.header.getHeight();
            }
            if(this.pageSize){
                this.assetHeight += this.footer.getHeight();
            }
        }

        if(this.bufferSize){
            this.doResize(this.bufferSize);
            delete this.bufferSize;
        }
        this.list.alignTo.apply(this.list, [this.el].concat(this.listAlign));

        // zindex can change, re-check it and set it if necessary
        this.list.setZIndex(this.getZIndex());
        this.list.show();
        if(Ext.isGecko2){
            this.innerList.setOverflow('auto'); // necessary for FF 2.0/Mac
        }
        this.mon(Ext.getDoc(), {
            scope: this,
            mousewheel: this.collapseIf,
            mousedown: this.collapseIf
        });
        this.fireEvent('expand', this);
    }

});
于 2011-01-14T09:10:33.183 に答える
0

cbRegR未定義の変数であるため、使用は機能しません。どちらかを使用

listeners: { 'expand': function() { Ext.getCmp('cbRegR').clearValue(); } }

または、より洗練されたアプローチ:

listeners: { 'expand': function(self) { self.clearValue(); } }
于 2011-01-14T09:15:36.050 に答える
0

expand イベントは良いイベントですが、スコープに注意する必要があります。

listeners: {
 'expand': function() {
    cbRegR.clearValue(); 
 },
 scope:this
}

スコープの設定は役に立ちますか?

于 2011-01-14T09:00:09.770 に答える