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