0

私には がありgrouped Checkbox、その中には 4checkboxesがあります。

ユーザーがチェックボックスを選択すると、テキスト ボックスの値に基づいてデータ ストアをフィルター処理する必要があります。2 つのテキスト ボックスを選択すると の出力が得られ["Albert","Francis"]、最初のテキスト ボックスのみを選択すると得["Albert"]られます。

さて、これをフィルタリングする方法を知る必要がありますか?

onCheckBoxGroupChange : function (field,newValue,oldValue,options) {
var chkv=newValue.chb;
console.log (chkv);
var st= Ext.getStore('People'); 
        st.on('load', function() {
           st.filter({
               filterFn: function(rec) {                   
                   return rec.get('name') == chkv; 

私が抱えている問題は、両方を選択すると、(配列のように)CheckBoxeschkvなるため、配列を検索しないため["Albert","Francis"]、値を返すことができないことです。rec.get('name') == chkv;

誰かが私を助けることができますか?

4

1 に答える 1

0

どうですか:

filterFn: function(rec) {
    return Ext.Array.contains(chkv, rec.get('name'));
}

フィルタリングする場合、ストアをリロードする必要がないことを確認してください。上記のスニペットで行っていることのようです。

実際には他にも問題があります。onCheckBoxGroupChangeハンドラーが実際に行うことは次のとおりです (上記の方法をそのままにしておく場合)。

ユーザーがチェックボックスをクリックするたびに、まずサーバーからストアをリロードし、選択したフィルターをストアのフィルターに追加してから、保存したフィルターでストアをフィルタリングします。

例えば:

ユーザーが「Albert」チェックボックスをクリックする

Store reloads 
Store adds `["Albert"]` filter function 
Store performs filtering with `["Albert"]` filter function

ユーザーが「Francis」チェックボックスをクリックする

Store reloads
Store adds `["Albert", "Francis"]` filter function
Store performs filtering with `["Albert"]` filter function
Store performs filtering with `["Albert", "Francis"]` filter function

ユーザーが「Albert」チェックボックスのクリックを解除

Store reloads
Store adds `["Francis"]` filter function
Store performs filtering with `["Albert"]` filter function
Store performs filtering with `["Albert", "Francis"]` filter function
Store performs filtering with `["Francis"]` filter function

次第にフィルターが増えていきます。さらに、ストアを何度も不必要にリロードします。それがあなたの目的だとは思いません。

これについての詳細なデータについては、データストア フィルタリングに関するドキュメントを参照してください。

また、あなたの質問では、2 つのチェックボックスを選択したときに配列が返されたため、この問題が発生したと述べました。質問のテキストによると、1 つのチェックボックス ( ) を選択すると、配列も取得されます["Albert"]。項目は 1 つしかありませんが、配列です。

そのため、私のソリューション (chkv変数を配列にする必要があります) が機能します。

于 2012-07-23T23:18:55.140 に答える