5

コンボフィールドをバックアップするために使用するたびにストアがフィルタリングされ続けるため、イライラしています。これを無効にする方法はありますか?

シナリオ

dataフィールドのあるストアがあります。ストアがインスタンス化されるときにロードされるオブジェクトの配列。私はこのストアを使用して、アプリのさまざまな領域で多数のコンボを駆動しています。残念ながら、私のコンボはストアにフィルターを適用しているため、同じストアを使用する他のコンボでは、リスト全体ではなく、フィルターされた値のみが後で表示されます。

回避策

私の間抜けな回避策はcombo.getStore().clearFilter()、コンボが終了した後に電話をかけることですが、それは非常に早く古くなり、おそらくどこかにバグが発生するでしょう。

コンボの設定から削除するqueryMode:'local'と、便利な先行入力機能が機能しなくなったことを除いて、すべて問題ありません。ドロップダウンにアイテムのリストが表示され、一致するアイテムの入力文字をナビゲートすることさえできません。これは通常のhtmlselectタグよりも悪いです!

何か案は?

ありがとう!

4

4 に答える 4

2

comboフィルタリングは ではなくに適用されるため、これを行うことはできませんstore。同じインスタンスを複数作成storeして、それを操作することができます。うまくいくかどうかはわかりませんが。

Ext.create('combo', {
      //other config
      store : Ext.create('my.store')
});

comboフィルタリングを適用できないため、編集不可にすると機能します。しかし、あなたが言うように、先行入力機能が必要な場合は、store.

于 2012-10-18T18:04:10.760 に答える
1

コンボがバッキング ストアにフィルターを追加するため、アプリケーション内でストアを使用するすべてのコンボに影響するという事実に照らして、コンボ クラスにオーバーライドを追加することを選択しました。コンボボックスが破壊されます。

Ext.define('MAP.override.Combo', {
    override : 'Ext.form.field.ComboBox',
    initComponent : function()
    {
        this.callParent(arguments);

        this.on('beforedestroy',function(combo){
            if(combo.leaveFilter === true) return;

            console.log('clearing filter on store');
            combo.getStore().clearFilter();
        });
    }
});

ちょっとハックですが、フィルターをクリアしないことを示すエスケープ ハッチも許可します。

于 2012-10-18T21:17:42.367 に答える
0

この解決策を処理するために私が見つけた最も簡単な方法は、次のリスナーをコンボに追加することです。

listeners: {
    beforequery: function(queryPlan){
        queryPlan.query = true;
    }
}

デフォルトでは、queryPlan.query は現在コンボ フィールドにあるテキストで、フィルタリングに使用されます。false に設定するとクエリがキャンセルされますが、true に設定すると、フィルタ値なしでクエリを実行できるため、すべてのコンボ フィールドのドロップダウン リストにすべての値が保持されます。

于 2014-05-21T17:08:34.387 に答える
0

ExtJS 4.2 とコンボで同様の問題が発生しました。ストアはフィルタリングされ続けましたが、その後コンボが使用できなくなったため、clearFilter() を使用できませんでした。うまくいった私の解決策は、コンボのこのリスナーです:

listeners: {
  blur: function(combo) {
    if (combo.queryFilter) {
      combo.queryFilter.setValue('');
      combo.getStore().filter();
    }
  }
}
于 2016-02-24T15:25:03.763 に答える