2012-07-22 64 views
0

我有一個grouped Checkbox,它有4 checkboxes使用複選框過濾 - 邏輯問題

當用戶選擇複選框時,我需要根據文本框的值過濾數據存儲。當我選擇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;不尋找一個陣列。

有人可以幫助我嗎?

回答

0

什麼:

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

我要確保你知道你不必重裝店,如果你想過濾。它看起來就是你在上面提供的代碼片段中所做的。

還有其他的問題其實,你的onCheckBoxGroupChange處理程序會怎麼做(如果你離開它,你擁有它上面的方法),如下:

每次用戶點擊一個複選框,它首先會重新加載從服務器存儲,然後將選定的過濾器添加到商店的過濾器,然後通過已保存的過濾器過濾商店。

例如爲:

用戶點擊 「偉業」 複選框

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

用戶點擊 「弗朗西斯」 複選框

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

用戶unclicks 「偉業」 複選框

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 

您將逐漸獲得越來越多的過濾器。此外不必要地重新加載商店很多次。我不認爲這是你的目標。

您應該查看關於datastore filtering的文檔以獲取更多關於如何操作的數據。

另外,在你的問題中,你說當你選擇兩個複選框時,你有這個問題,因爲它返回一個數組。根據你的問題的文字,當你選擇一個複選框時(["Albert"]),你也會得到一個數組。它只有一個項目,但它是一個數組。

這就是爲什麼我的解決方案(它需要你的chkv變量是一個數組)才能工作。