0
我使用ExtJS的3.4ExtJS的自动栅格这类问题
我已经创建了一个ExtJS网格,即建立它自己根据从服务器端收到一些元数据。
这个 '自动栅格' 是建立在一个 '自动存储' 这样的:
格:
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 }));
for (var i = 0; i < 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 a 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();
}
商店:
function autoGridStore(gridStoreFields, readerFields) {
var autoGridStoreReader = new Ext.data.JsonReader({
totalProperty: "totalCount", // The property which contains the number of returned records (optional)
root: "records", // The property which contains an Array of record objects
id: "Id" // The property within the record object that provides an ID for the 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;
}
Ë非常好的事情,我的数据很好地检索,很好地呈现在网格上。 的问题是,当我试图做一个排序(remoteSort),对排序方向错误,我得到这个分机错误:
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;
}
}
fieldName的良好恢复,但排序方向为空。
看来,我的店也被认为是一个对象,而不是Ext.Json.Store因为当我调试我有这样的:
var field = this.fields.get(fieldName); => this.fields doesn't contain a definition for get ...
任何想法吗?