The example is based on the MVC architecture provided in ExtJs 4.
Step 1: Application starting point index.html
<html> <head> <title>ExtJs PagingMemoryProxy Ajax JSON data from Java Servlet with Grid Filter</title> <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css"> <script type="text/javascript" src="extjs/ext-all-debug.js"></script> <script type="text/javascript" src="app.js"></script> </head> <body></body> </html>
Step 2: Application JavaScript file app.js
Ext.Loader.setPath('Ext.ux', 'extjs/ux'); Ext.Loader.setConfig({ enabled: true }); Ext.require([ 'Ext.data.*', 'Ext.grid.*', 'Ext.ux.data.PagingMemoryProxy' ]); Ext.application({ name: 'SAMPLE', appFolder: 'app', controllers: [ 'Countries' ], launch: function() { console.log("Launching the application!"); Ext.Ajax.request({ loadMask: true, url: 'CountryServlet', scope: this, success: function(response, callOptions) { myData = Ext.decode(response.responseText); myTempData = Ext.decode(response.responseText); Ext.create('Ext.container.Viewport', { items: [ { xtype: 'countrylist', } ] }); }, failure: function(response, callOptions) { // Use the response } }); } });
Step 3: JavaScript source file for country model Country.js
Ext.define('SAMPLE.model.Country', { extend: 'Ext.data.Model', fields: [ 'code', 'name', 'continent', 'region', 'lifeExpectancy', 'gnp' ] });
Step 4: JavaScript source file for country store Countries.js
var myData; var myTempData; Ext.define('SAMPLE.store.Countries', { extend: 'Ext.data.Store', model: 'SAMPLE.model.Country', pageSize: 10, listeners: { beforeload: function(store, operation, options){ console.log("My Store data is loading!"); } } });
Step 5: JavaScript source file for country grid panel CountryList.js
Ext.define('SAMPLE.view.CountryList' ,{ extend: 'Ext.grid.Panel', alias : 'widget.countrylist', title : 'List of Countries', store : 'Countries', loadMask: true, autoheight: true, width: 1000, dockedItems: [{ xtype: 'pagingtoolbar', store: 'Countries', dock: 'bottom', displayInfo: true, items: [ { xtype: 'tbseparator' }, { xtype : 'trigger', itemId : 'gridTrigger', fieldLabel: 'Filter Grid Data', triggerCls : 'x-form-clear-trigger', emptyText : 'Start typing to filter grid', size : 30, minChars : 1, enableKeyEvents : true, onTriggerClick : function(){ this.reset(); this.fireEvent('triggerClear'); } } ] }], initComponent: function() { this.columns = [ {header: 'Country Code', dataIndex: 'code', flex: 1}, {header: 'Name', dataIndex: 'name', flex: 1}, {header: 'Continent', dataIndex: 'continent', flex: 1}, {header: 'Region', dataIndex: 'region', flex: 1}, {header: 'Life Expectancy', dataIndex: 'lifeExpectancy', flex: 1}, {header: 'GNP', dataIndex: 'gnp', flex: 1} ]; this.callParent(arguments); } });
Step 6: JavaScript source file for the application controller Countries.js
Ext.define('SAMPLE.controller.Countries', { extend : 'Ext.app.Controller', stores : ['Countries'], models : ['Country'], views : ['CountryList'], refs: [{ ref: 'myGrid', selector: 'grid' }], init : function() { this.control({ 'viewport > panel' : { render : this.onPanelRendered }, 'countrylist #gridTrigger' : { keyup : this.onTriggerKeyUp, triggerClear : this.onTriggerClear } }); }, onPanelRendered : function() { console.log('The panel was rendered'); this.getCountriesStore().setProxy({ type: 'pagingmemory', data: myTempData, reader: { type: 'json', totalProperty: 'totalCount', root: 'countries', successProperty: 'success' } }); this.getCountriesStore().load(); }, onTriggerKeyUp : function(t) { console.log('You typed something!'); var thisRegEx = new RegExp(t.getValue(), "i"); var grid = this.getMyGrid(); records = []; Ext.each(myData.countries, function(record) { for (var i = 0; i < grid.columns.length; i++) { // Do not search the fields that are passed in as omit columns if (grid.omitColumns) { if (grid.omitColumns.indexOf(grid.columns[i].dataIndex) === -1) { if (thisRegEx.test(record[grid.columns[i].dataIndex])) { if (!grid.filterHidden && grid.columns[i].isHidden()) { continue; } else { records.push(record); break; }; }; }; } else { if (thisRegEx.test(record[grid.columns[i].dataIndex])) { if (!grid.filterHidden && grid.columns[i].isHidden()) { continue; } else { records.push(record); break; }; }; }; } }); myTempData.countries = records; myTempData.totalCount = records.length; this.getCountriesStore().load(); }, onTriggerClear : function() { console.log('Trigger got reset!'); myTempData.countries = myData.countries; myTempData.totalCount = myData.totalCount; this.getCountriesStore().load(); } });
No comments:
Post a Comment
NO JUNK, Please try to keep this clean and related to the topic at hand.
Comments are for users to ask questions, collaborate or improve on existing.