Ext.define('CaseModel', {
extend: 'Ext.data.Model',
fields: [
{ name: 'caseName', type: 'string' }
],
proxy: {
type: 'memory',
reader: {
type: 'json'
}
}
});
Ext.define('OptionModel', {
extend: 'Ext.data.Model',
requires: ['CaseModel'],
fields: [
{ name: 'option', type: 'string' },
],
hasMany: {
model: 'CaseModel',
associationKey: 'caseNames',
name: 'getCaseStore'
},
proxy: {
type: 'memory',
reader: {
type: 'json'
}
}
});
Ext.define('OptionStore', {
extend: 'Ext.data.Store',
alias: 'store.option-store',
requires: ['OptionModel'],
model: 'OptionModel',
data: [
{ option: 'зонт', caseNames: [ { caseName: 'дождь' } ] },
{ option: 'бейсболка', caseNames: [ { caseName: 'солнце' } ] },
{ option: 'кроссовки', caseNames: [ { caseName: 'дождь' } ] }
],
filterForCase: function(caseName) {
this.clearFilter();
if (typeof caseName == 'undefined') {
return;
}
this.filter([{
filterFn: function(item) {
return item.getCaseStore().find('caseName', caseName, 0, false, false, true) >= 0;
}
}]);
}
});
var optionStore = Ext.create('OptionStore');
optionStore.filterForCase('солнце');
console.log(optionStore.getCount());
External resources loaded into this fiddle: