sorting - Extjs autoGrid sort Issue -
i'm using extjs 3.4
i have created extjs grid, build self according meta data recieved server side.
this 'autogrid' build on 'autostore' :
grid :
function autogrid(response, panel, node) { var jsondata = ext.util.json.decode(response[0]); var grid = ext.getcmp('contentgrid_' + panel.title); if (grid) { grid.destroy(); } var gridstorefields = [], sizecolumnavailable = false, gridpagingtoolbar, gridpagerinfo, griditemsinfo, griddroptarget = null, readerfields = [], gridcolumns = [], gridfilters; try { gridcolumns.push(new ext.grid.rownumberer({ width: 30 })); (var = 0; < jsondata.length; i++) { var field = { name: jsondata[i].name, type: jsondata[i].type }; var header = { name: jsondata[i].name, dataindex: jsondata[i].name, type: jsondata[i].type, header: jsondata[i].header, sortable: jsondata[i].sortable }; gridstorefields.push(field); gridcolumns.push(header); readerfields.push(jsondata[i].name); } } catch (e) { processscripterror(e); } var store = autogridstore(gridstorefields, readerfields, selectednode); grid = new ext.grid.gridpanel({ defaults: { sortable: true }, id: 'contentgrid_' + panel.targetentity, store: store, columns: gridcolumns, frame: true, loadmask: true, remotesort: true, width: 700, height: 450, bbar: new ext.pagingtoolbar({ id: 'contentgrid_' + panel.title + '_pagingtoolbar', pagesize: 20,//commonparameters.user.preferences.linesperpage, store: store, displayinfo: true, totalproperty: "totalcount", displaymsg: commonparameters.labels.lbl_element_afficher + ' {0} - {1}' + ' ' + commonparameters.labels.lbl_de + ' ' + '{2}', emptymsg: commonparameters.labels.msg_empty }), listeners: { rowdblclick: function (grid, row, _object) { // si l'utilisateur accès , ouverture au double clic // if(gettraitementwebafficher(1)) //{ var record = grid.getstore().getat(row); if (record != null) edit(record.data.id); else ext.messagebox.alert(commonparameters.labels.msg_error, commonparameters.labels.msg_probleme); // } }, rowcontextmenu: initgridcontextmenu } }); grid.store.load({ params: { start: 0, limit: 2,//commonparameters.user.cdus_nb_ligne_par_page, sort: grid.store.sortinfo.field, dir: grid.store.sortinfo.direction, 'action': 'search', targetentity:grid.store.targetentity } }); grid.store.on('load', function (store, records, options) { // store successufully loaded => hide loading window... commonparameters.globalloadmask.hide(); }); panel.add(grid); panel.dolayout(); }
store :
function autogridstore(gridstorefields, readerfields) { var autogridstorereader = new ext.data.jsonreader({ totalproperty: "totalcount", // property contains number of returned records (optional) root: "records", // property contains array of record objects id: "id" // property within record object provides id record (optional) }, readerfields); var autogridstore = new ext.data.store({fields : gridstorefields, url: selectednode.attributes.nodeurl, targetentity: selectednode.attributes.targetentity }); autogridstore.remotesort = true; autogridstore.idproperty = 'id'; autogridstore.totalproperty = 'totalcount'; autogridstore.successproperty = 'success'; autogridstore.sortinfo = { field: "id", direction: "asc" }; if (autogridstore.getsortstate()) { autogridstore.sortinfo = { field: autogridstore.getsortstate().field, direction: autogridstore.getsortstate().direction }; } autogridstore.reader = autogridstorereader; return autogridstore; }
every thing ok, data retrieved, rendered on grid. problem when tried make sort ( remotesort ), there error on sort direction, got ext error :
singlesort: function (fieldname, dir) { var field = this.fields.get(fieldname); if (!field) { return false; } var name = field.name, sortinfo = this.sortinfo || null, sorttoggle = this.sorttoggle ? this.sorttoggle[name] : null; if (!dir) { if (sortinfo && sortinfo.field == name) { dir = (this.sorttoggle[name] || 'asc').toggle('asc', 'desc'); } else { dir = field.sortdir; } } the fieldname retrieved, sort direction empty.
it seems store considered object , not ext.json.store because when debug have :
var field = this.fields.get(fieldname); => this.fields doesn't contain definition ... any idea please ?
i have experienced same problem. this.fields.get(fieldname) undefined when sort. appears when store not construct, might come meta data received server side.
you can achieve want using store metachange event:
onmetachange: function(newcol){ [...] this.grid.reconfigure(store, new ext.grid.columnmodel(this.reader.meta.colmodel)) } see this:
Comments
Post a Comment