/** * @class Ext.multisort.Panel * @extends Ext.panel.Panel * @author Ed Spencer * * */ Ext.define('Ext.multisort.Panel', { extend: 'Ext.panel.Panel', width: 800, height: 450, title: 'Multisort DataView', autoScroll: true, requires: ['Ext.toolbar.TextItem', 'Ext.view.View'], initComponent: function() { this.tbar = Ext.create('Ext.toolbar.Toolbar', { plugins : Ext.create('Ext.ux.BoxReorderer', { listeners: { scope: this, drop: this.updateStoreSorters } }), defaults: { listeners: { scope: this, changeDirection: this.updateStoreSorters } }, items: [{ xtype: 'tbtext', text: 'Sort on these fields:', reorderable: false }, { xtype: 'sortbutton', text : 'Type', dataIndex: 'type' }, { xtype: 'sortbutton', text : 'Name', dataIndex: 'name' }] }); this.items = { xtype: 'dataview', tpl: [ '', '
', (!Ext.isIE6? '' : '
'), '

{name}

', '
', '
' ], plugins: [Ext.create('Ext.ux.DataView.Animated')], itemSelector: 'div.item', store: Ext.create('Ext.data.Store', { autoLoad: true, sortOnLoad: true, storeId: 'test', fields: ['name', 'thumb', 'url', 'type'], proxy: { type: 'ajax', url : '../../datasets/sencha-touch-examples.json', reader: { type: 'json', root: '' } } }) }; this.callParent(arguments); this.updateStoreSorters(); }, /** * Returns the array of Ext.util.Sorters defined by the current toolbar button order * @return {Array} The sorters */ getSorters: function() { var buttons = this.query('toolbar sortbutton'), sorters = []; Ext.Array.each(buttons, function(button) { sorters.push({ property : button.getDataIndex(), direction: button.getDirection() }); }); return sorters; }, /** * @private * Updates the DataView's Store's sorters based on the current Toolbar button configuration */ updateStoreSorters: function() { var sorters = this.getSorters(), view = this.down('dataview'); view.store.sort(sorters); } });