store with options
by Alexander Novikov
HTML
<link rel="stylesheet" href="http://cdn.sencha.io/ext-4.0.7-gpl/resources/css/ext-all.css">
<script src="http://cdn.sencha.io/ext-4.0.7-gpl/ext-all.js"></script>
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
JavaScript
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());