2011-08-24 46 views
0

我有一個ext.form.Combobox對象,由ext.data.JsonStore動態填充。用戶可以鍵入一個搜索鍵來過濾列表並選擇其中一個過濾器選項。我希望下拉菜單中的一個可點擊的選項爲「全部」。我怎樣才能使這個選項總是顯示在動態組合框列表中?它現在設置的方式,只有當用戶在搜索字段中輸入「a..l..l ..」時才顯示。「全部搜索」選項在Javascript Combobox

是否有一個搜索字詞可以應用到它是一個通配符,所以無論搜索字詞是什麼都會出現?

感謝

回答

0

我結束了beforeQuery屬性設置爲改變爲「搜索的搜索字符串值的函數所有「選項,無論當前的查詢是什麼。

喜歡的東西..

combobox.on('beforeQuery', function(q) { 
    searchStore.getAt(searchStore.getCount()-1).data.search_string = q.query 
} 

這適用於我的代碼,因爲搜索所有選項是最後一個加入搜索商店。否則,您需要以另一種方式訪問​​「搜索全部」記錄。

0

我平時工作解決這個問題的方法是通過組合的emptyText配置選項設置爲'All'。這樣,當組合框沒有設置任何值(當它被提交給服務器時它也會提交一個空值),你可以假設用戶不想過濾這個字段。

0

通過一些Ext3的源代碼,一個漂亮的方式得到你想要將覆蓋上Ext.data.StorefilterBy功能,並截取功能,讓「全部」記錄通過功能的展望:

Ext.ux.AllJsonStore = Ext.extend(Ext.data.JsonStore, { 

    filterBy: function(fn, scope) { 
     var allFn = Ext.util.Functions.createInterceptor(fn, function(record, id) { 
      if (record.data.display == "All") { 
       return true; 
      } 
     }); 
     return Ext.ux.AllJsonStore.superclass.filterBy.call(this, allFn, scope); 
    } 

}); 

那麼無論你創建你的Ext.form.ComboBox店,使用此店來代替:

var combo = new Ext.form.ComboBox({ 
    ... 
    store: new Ext.ux.AllJsonStore({...}) 
    ... 
});