我使用 ExtJs 创建了一个商店,我想将商店的值加载到 ComboBox。但是在加载值之前,我需要根据在另一个组合框中选择的值过滤一些数据。
因此,出于此目的,我认为我需要在商店中应用过滤器,请任何机构可以帮助我如何做到这一点。
型:-
Ext.define('City', {
extend: 'Ext.data.Model',
fields: [
{ name: 'StateId', type: 'string' },
{ name: 'City', type: 'string' },
]});
商店:-
var cityStore = Ext.create('Ext.data.Store', {
model: 'City',
data : [
{ StateId: '1', City: 'Bangalore'},
{ StateId: '1', City: 'Mysore'},
{ StateId: '1', City: 'Dharwad'},
{ StateId: '2', City: 'Mumbai'},
{ StateId: '2', City: 'Pune'},
{ StateId: '2', City: 'Nagpur'}
]});
现在我正在使用这个城市商店在组合框中加载。 但是在加载之前,我希望如果 stateId 为 1,那么只有 3 条记录(班加罗尔、迈索尔、达瓦德)在组合框中加载,如果 stateId 为 2,那么其他 3 条记录在组合框中加载。我怎么能实现它。
根据 Ext.data.Store 过滤器方法文档:
var stateId = 1; // your value
cityStore.clearFilter(true);
cityStore.filter('StateId', stateId);
更新
我发现ComboBox会自行过滤数据,并且没有机会更改其行为。但是我看到这个问题有两种解决方案:
手动筛选数据(请参阅 Ext.util.Mixed Collection 筛选器)并将其加载到您的存储中(请参阅 Ext.data.Store 加载)
禁用商店的
clearFilter
和filter
方法并使用自己的cityFilter
:Ext.define('CityStore', { extend: 'Ext.data.Store', filter: Ext.emptyFn, clearFilter: Ext.emptyFn, cityFilter: function (stateId) { Ext.data.Store.prototype.clearFilter.call(this); Ext.data.Store.prototype.filter.call(this, 'StateId', stateId); } });
然后使用
cityFilter()
方法。