2012-11-19 55 views
2

我對從拉數據「offices.json」的一個標籤面板應用程序的頁面中的一個嵌套列表煎茶觸摸2 filterby()不更新記錄

我希望能夠過濾該列出用戶何時單擊工具欄按鈕。然而,我的filterBy()函數不會更新我可以看到的商店和辦公室列表,即使我可以在控制檯中看到它正在迭代記錄並找到匹配項。我究竟做錯了什麼? (是的,我已經嘗試在做之前和之後filterBy無果s.load()!)

toolbar:{       
    items:[{ 
      text: 'Near you', 
      id: 'btnNearYou', 
      xtype: 'button', 
      handler: function() { 
      s = Ext.StoreMgr.get('offices'); 
      s._proxy._url = 'officesFLAT.json';   
      console.log("trying to filter"); 
      s.filterBy(function(record) { 
       var search = new RegExp("Altrincham", 'i'); 
       if(record.get('text').match(search)){ 
       console.log("did Match"); 
       return true; 
       }else { 
       console.log("didnt Match"); 
       return false; 
      } 
      }); 
      s.load(); 
      }        
    }] 

爲了記錄我定義,像這樣我的商店:

store: { 
    type: 'tree', 
    model: 'ListItem', 
    id: 'offices', 
    defaultRootProperty: 'items', 
    proxy: { 
     type: 'ajax', 
     root: {}, 
     url: 'offices.json', 
     reader: { 
      type: 'json', 
      rootProperty: 'items' 
     } 
    } 
} 

回答

2
  1. 無需每次重新創建正則表達式,外面緩存它。

  2. 您可以簡化代碼很多(見下文)。

  3. 你爲什麼直接調用後負荷?這將把它發送到服務器,它將只檢索相同的數據集。

toolbar: { 
    items: [{ 
     text: 'Near you', 
     id: 'btnNearYou', 
     xtype: 'button', 
     handler: function() { 
      s = Ext.StoreMgr.get('offices'); 
      s._proxy._url = 'officesFLAT.json'; 
      var search = /Altrincham/i; 
      s.filterBy(function(record) { 
       return !!record.get('text').match(search); 
      }); 
     } 
    }] 
} 
+0

我添加上面的代碼到我的按鈕的處理函數,但沒有任何反應。該函數觸發(我可以通過console.log看到),但nestedList不會使用已過濾的記錄重新加載。如果我調用s.load(),我只能得到一些東西出現(然後如你所說,你得到了整個數據集)我應該在商店層面設置什麼?我將它添加到上面的主要問題.... –

+0

我認爲我的問題源於嘗試這樣做到一個NestedList。從瀏覽互聯網看來,它不可能在Sencha Touch中過濾嵌套列表。但是,如果這是一個正常的列表,那麼上面的代碼確實有用,所以謝謝埃文! –