I wanted to include some filtering support in a paged grid view by also passing a filter variable along with the post request. Here's how I did it.
Code:
dm = new YAHOO.ext.grid.JSONDataModel({
root: 'Users',
totalProperty: "totalCount",
id: 'id',
fields: ['username', 'email', 'level', 'birthday', 'join_date', 'last_login']
});
dm.initPaging('/ci/admin/users_list', 50);
dm.setDefaultSort(cm, 0, 'DESC');
grid = new YAHOO.ext.grid.EditorGrid('users_grid', dm, cm);
grid.getSelectionModel().clicksToActivateCell = 2;
grid.render();
dm.paramMap['filter'] = 'filter';
dm.createParams = function(pageNum, sortColumn, sortDir, filter){
var params = {}, map = this.paramMap;
for(var key in this.baseParams){
params[key] = this.baseParams[key];
}
params[map['page']] = pageNum;
params[map['pageSize']] = this.getPageSize();
params[map['sortColumn']] = (typeof sortColumn == 'undefined' ? '' : sortColumn);
params[map['sortDir']] = sortDir || '';
params[map['filter']] = filter || '';
return params;
};
dm.loadPage = function(pageNum, filter, callback, keepExisting){
var sort = this.getSortState();
var params = this.createParams(pageNum, sort.column, sort.direction, filter);
this.load(this.pageUrl, params, this.setLoadedPage.createDelegate(this, [pageNum, callback]),
keepExisting ? (pageNum-1) * this.pageSize : null);
};
dm.loadPage(1, 'temp');
This will now send a post request that looks like this -
Code:
page=1&pageSize=50&sortColumn=0&sortDir=DESC&filter=temp
This is just a start, as I'll have to figure out how to carry over that filter value for all the requests to loadPage and such, but figured I'd throw the start out there for anyone else looking to do something similar and trying to find a starting point.