If you need you can download the Architect 3 project from here: https://mega.co.nz/#!9NFyRCLL!98dkUmISgGO_p0crDI8YExINmf5ORCglkDrWjuRyu7Y
First we create a Store with a model and some data in it. If you want to take a look, you'll have a link here: https://gist.github.com/difa1/9115899
Second we need to create a simple list in a panel:
Ext.define('MyApp.view.MyPanel', { extend: 'Ext.Panel', requires: [ 'Ext.dataview.List', 'Ext.XTemplate' ], config: { layout: 'vbox', items: [ { xtype: 'list', flex: 1, itemTpl: ['{name}, {namelast}'], store: 'persons' } ] } });
Third we would like to implement the searchfield. You can place it however you want.
Ext.define('MyApp.view.MyPanel', { extend: 'Ext.Panel', requires: [ 'Ext.field.Search', 'Ext.dataview.List', 'Ext.XTemplate' ], config: { layout: 'vbox', items: [ { xtype: 'searchfield', docked: 'top', itemId: 'storeSearchField', label: 'Field' }, { xtype: 'list', flex: 1, itemId: 'mylist', itemTpl: ['{name}, {namelast}'], store: 'persons' } ] } });
Now that the basics a build we build a new controller where all the logic is stored. So lets go to Step 4 and create the controller with 2 listeners: keyup and clearicontap:
Ext.define('MyApp.controller.logicController', { extend: 'Ext.app.Controller', config: { control: { "searchfield#storeSearchField": { clearicontap: 'onStoreSearchFieldClearicontap', keyup: 'onStoreSearchFieldKeyup' } } }, onStoreSearchFieldClearicontap: function(textfield, e, eOpts) {
// Logic }, onStoreSearchFieldKeyup: function(textfield, e, eOpts) {
// Logic } });
The logic for the clearicontap is pretty simple... All we want is to clear all filters. All we need is the clearfilter method :
onStoreSearchFieldClearicontap: function(textfield, e, eOpts) { Ext.getStore('persons').clearFilter(); }
The keyup is a bit more tricky, why I like to use a basic function for it. I tried to explain all steps in the coding itself. If anything were unclear, you could contact me on Google+ ;)
onStoreSearchFieldKeyup: function(textfield, e, eOpts) { this.filterList(textfield, Ext.getStore('persons')); }, filterList: function(textfield, store) { // Get the searchfield content var value = textfield.getValue(); // Clear previous filters store.clearFilter(); // Check for search value, if not present we don't need to to anything... if (value) { // Split search value: Space --> 2 custom values! var searches = value.split(' '), regexps = [], i; // Loop search values and build regex for (i = 0; i < searches.length; i++) { // Ignore spaces if (!searches[i]) continue; // Regex array regexps.push(new RegExp(searches[i], 'i')); } // Filter the store store.filter(function(record) { // Clear matches first var matched = []; // Loop all regex expressions for (i = 0; i < regexps.length; i++) { var search = regexps[i]; var didMatch; didMatch = record.get('name').match(search) || record.get('namelast').match(search); // You can add as many model fields as you want! --> record.get('city1').match(search) || // Write match to array matched.push(didMatch); } // Nothing found? Do not return anything ;) if (regexps.length > 1 && matched.indexOf(false) != -1) { return false; } else { // Found something? Just return to store ;) return matched[0]; } }); // Finally load store store.load(); }
Keine Kommentare:
Kommentar veröffentlichen