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.