Вот как вы делаете то, что вам нужно (для двух уровней фильтрации) в Sencha Touch 1.
// Модели
App.models.States = Ext.regModel('State', {
idProperty : 'stateId',
fields : [
{ name : 'stateId', type : 'integer'},
{ name : 'state', type : 'string'}
]
});
App.models.Districts = Ext.regModel('District', {
fields : [
{ name : 'districtId', type : 'integer'},
{ name : 'stateId', type : 'integer'},
{ name : 'district', type : 'string'}
]
});
// Магазины
App.stores.StatesStore = new Ext.data.Store({
model : 'State',
data : [
{ stateId : 1, state : 'Maharashtra' },
{ stateId : 2, state : 'Andhra Pradesh' }
],
sorters : 'state',
autoLoad : true
});
App.stores.DistrictStore = new Ext.data.Store({
model : 'State',
data : [
{ districtId : 1, district : 'Nasik', stateId : 1 },
{ districtId : 2, district : 'Thane', stateId : 1 },
{ districtId : 3, district : 'Jalgaon', stateId : 1 },
{ districtId : 4, district : 'Hyderabad', stateId : 2 },
{ districtId : 5, district : 'Nizamabad', stateId : 2 },
{ districtId : 6, district : 'Kurnool', stateId : 2 }
],
sorters : 'district',
autoload : true
});
Я загрузил данные здесь, чтобы вы могли видеть, как они связаны.Каждый идентификатор района теперь связан с идентификатором штата.Например, район Насик существует внутри штата Махараштра.Следовательно, districtID 1 для «Nasik» теперь ассоциируется с stateId 1 для «Maharashtra».
// Для поля выбора для штатов и округов
{
xtype: 'selectfield',
name : 'state',
id : 'state',
label: 'State',
store : App.stores.StatesStore,
displayField : 'state',
valueField : 'stateId',
listeners : {
change : function(t, value){
Ext.dispatch({
controller : 'Users',
action : 'filterLocations',
data : {value:value, level : 'district'}
});
}
}
},
{
xtype: 'selectfield',
name : 'district',
id : 'district',
label: 'District',
store : App.stores.DistrictStore,
displayField : 'district',
valueField : 'districtId'
}
Теперь поля выбора связаны сМодели / Магазины, которые мы создали ранее.
Теперь мы рассмотрим функцию контроллера, вызываемую при изменении поля выбора для состояний.
filterLocations: function(params){
var value = params.data.value;
var level = params.data.level;
if(level == "district"){
App.stores.DistrictStore.clearFilter();
App.stores.DistrictStore.filter('stateId', value);
var firstValue = Ext.getCmp('district').store.getAt(0);
if(firstValue) Ext.getCmp('district').setValue('Select District');
}
else if(level == "block"){
App.stores.BlockStore.clearFilter();
App.stores.BlockStore.filter('districtId', value);
var firstValue = Ext.getCmp('block').store.getAt(0);
if(firstValue) Ext.getCmp('block').setValue('Select Block');
}
},
Я дал вам расширенный контроллер, где может поддерживаться более одного уровня.Например, штаты могут фильтровать районы, районы могут фильтровать деревни и т. Д. И т. Д. Поэтому в контроллере мы берем уровень, на котором должна выполняться фильтрация.Если фильтрация должна выполняться между штатами и округами, первое условие if будет вызвано, и хранилище округа (и, следовательно, поле выбора) будет отфильтровано для получения желаемых значений.