2012-10-18 69 views
5

我越來越沮喪,因爲我的商店每當我使用它來支持combofield時都會不斷進行過濾。有什麼辦法可以禁用它嗎?Extjs4組合商店:當queryMode = local時刪除過濾器?

場景

我有上有一個data領域的商店;商店實例化時加載的對象數組。我使用這個商店來驅動我的應用程序的不同區域的一堆組合。不幸的是,我的組合在商店上應用過濾器,導致使用相同商店的其他組合僅在稍後顯示過濾值,而不是整個列表。

解決辦法

我愚蠢的解決方法是調用combo.getStore().clearFilter()我與組合完成後,但會得到老非常快,大概地方引進的錯誤,我敢肯定。

如果我從我的組合的配置中刪除queryMode:'local',一切都很好,除了現在便捷的輸入提示功能不再有效;我只是在下拉列表中顯示了一個項目列表,我甚至無法瀏覽匹配項目的輸入字母。這比標準的HTML select標籤更糟!

任何想法?

謝謝!

回答

2

你不能這樣做,因爲篩選不是應用在combo上,而是應用在store上。你可以嘗試創建同一個store的多個實例並使用它。雖然我不知道它是否會起作用。

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

,如果你讓combo不可編輯,因爲可以被應用沒有過濾它會工作。但是,正如你所說,你需要提前輸入功能,你需要創建store的多個實例。

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(); 
     }); 
    } 
}); 

這有點破解,但我也允許指示不清除過濾器的逃生艙口。

0

我已經找到了處理此解決方案的最簡單的方法就是把下面的監聽器添加到組合:

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

默認queryPlan.query目前其中用於過濾組合字段中的文本。將其設置爲false將取消查詢,但將其設置爲true將允許查詢無需篩選器值,因此所有組合字段的下拉列表中都保留所有值。

0

我有類似的問題與ExtJS 4.2和組合。商店保持被過濾,但我無法使用clearFilter(),因爲在該組合後無法使用。我的解決方案,工作,是這個組合聽衆:

listeners: { 
    blur: function(combo) { 
    if (combo.queryFilter) { 
     combo.queryFilter.setValue(''); 
     combo.getStore().filter(); 
    } 
    } 
}