Extjs 使用在选项卡中呈现的通用网格存储数据问题
我有一个通用的网格组件。 单击菜单项时,相应的网格将显示在独立选项卡中。 在渲染网格组件时,将动态设置存储数据并填充网格。 如果在两个选项卡中打开两个网格,在导航到第一个选项卡时,网格数据不会显示,因为存储数据设置为第二个网格数据 希望能找到解决办法。谢谢 主控制器中的代码:Extjs 使用在选项卡中呈现的通用网格存储数据问题,extjs,Extjs,我有一个通用的网格组件。 单击菜单项时,相应的网格将显示在独立选项卡中。 在渲染网格组件时,将动态设置存储数据并填充网格。 如果在两个选项卡中打开两个网格,在导航到第一个选项卡时,网格数据不会显示,因为存储数据设置为第二个网格数据 希望能找到解决办法。谢谢 主控制器中的代码: OnMenuItemClick: function(c){ var nodeText = c.text, tabs = Ext.getCmp('app-tab'), tabB
OnMenuItemClick: function(c){
var nodeText = c.text,
tabs = Ext.getCmp('app-tab'),
tabBar = tabs.getTabBar(),
tabIndex;
for(var i = 0; i < tabBar.items.length; i++) {
if (tabBar.items.get(i).getText() === nodeText) {
tabIndex = i;
}
}
if (Ext.isEmpty(tabIndex)) {
/* Note: While creating the Grid Panel,here we are passing the Menu/Grid Id along with it for future reference */
tabs.add(Ext.create('DemoApp.view.grid.GenericGrid',{title:nodeText,gridId:c.id,overflowY: 'scroll',closable:true}));
tabIndex = tabBar.items.length - 1 ;
}
tabs.setActiveTab(tabIndex);
}
renderGridMetadata: function(genericGrid) {
var store = Ext.getStore("DemoApp.store.GenericGrid"),
gridId = genericGrid.up().gridId,
resourceURL = "resources/data/" + gridId + ".json";
var serviceInput = Util.createServiceResponse(gridId);
/*Dynamically add the proxy URL to the ViewModel
DemoApp.model.GenericGrid.getProxy().setUrl(resourceURL);*/
Ext.getBody().mask("Loading... Please wait...", 'loading');
Ext.Ajax.request({
url: Util.localGridService,
method: 'POST',
headers: {
"Content-Type": "application/json",
'SM_USER': 'arun.x.kumar.ap@nielsen.com',
'SM_SERVERSESSIONID': 'asdfadsf'
},
jsonData: {
getConfigurationAndDataRequestType: serviceInput
},
success: function(conn, response, options, eOpts) {
Ext.getBody().unmask();
var data = Util.decodeJSON(conn.responseText);
/* Apply REST WebServices response Metadata to the Grid */
var recordsMetaData = data.getConfigurationAndDataReplyType.gridConfigDataResponse.data.record;
var jsonMetaDataArray = [];
for (var c = 0; c < recordsMetaData.length; c++) {
var jsonMetaDataObject = {};
var text = data.getConfigurationAndDataReplyType.gridConfigDataResponse.data.record[c].displayName;
var dataIndex = data.getConfigurationAndDataReplyType.gridConfigDataResponse.data.record[c].columnName;
jsonMetaDataObject["text"] = text;
jsonMetaDataObject["dataIndex"] = dataIndex;
jsonMetaDataArray.push(jsonMetaDataObject);
}
/* Apply REST WebServices response data to the Grid */
var recordsData = data.getConfigurationAndDataReplyType.gridDataResponse.record;
var jsonDataArray = [];
for (var r = 0; r < recordsData.length; r++) {
var columnsData = data.getConfigurationAndDataReplyType.gridDataResponse.record[r].column;
var jsonDataObject = {};
for (var c = 0; c < columnsData.length; c++) {
jsonDataObject[columnsData[c].columnId] = columnsData[c].columnValue;
}
jsonDataArray.push(jsonDataObject);
}
store.setData(jsonDataArray);
genericGrid.reconfigure(store, jsonMetaDataArray);
},
failure: function(conn, response, options, eOpts) {
Ext.getBody().unmask();
Util.showErrorMsg(conn.responseText);
}
});
store.load();
}
});
OnMenuItemClick:函数(c){
var nodeText=c.text,
tabs=Ext.getCmp('app-tab'),
tabBar=tabs.gettabar(),
tabIndex;
对于(变量i=0;i
通用网格控制器中的代码:
OnMenuItemClick: function(c){
var nodeText = c.text,
tabs = Ext.getCmp('app-tab'),
tabBar = tabs.getTabBar(),
tabIndex;
for(var i = 0; i < tabBar.items.length; i++) {
if (tabBar.items.get(i).getText() === nodeText) {
tabIndex = i;
}
}
if (Ext.isEmpty(tabIndex)) {
/* Note: While creating the Grid Panel,here we are passing the Menu/Grid Id along with it for future reference */
tabs.add(Ext.create('DemoApp.view.grid.GenericGrid',{title:nodeText,gridId:c.id,overflowY: 'scroll',closable:true}));
tabIndex = tabBar.items.length - 1 ;
}
tabs.setActiveTab(tabIndex);
}
renderGridMetadata: function(genericGrid) {
var store = Ext.getStore("DemoApp.store.GenericGrid"),
gridId = genericGrid.up().gridId,
resourceURL = "resources/data/" + gridId + ".json";
var serviceInput = Util.createServiceResponse(gridId);
/*Dynamically add the proxy URL to the ViewModel
DemoApp.model.GenericGrid.getProxy().setUrl(resourceURL);*/
Ext.getBody().mask("Loading... Please wait...", 'loading');
Ext.Ajax.request({
url: Util.localGridService,
method: 'POST',
headers: {
"Content-Type": "application/json",
'SM_USER': 'arun.x.kumar.ap@nielsen.com',
'SM_SERVERSESSIONID': 'asdfadsf'
},
jsonData: {
getConfigurationAndDataRequestType: serviceInput
},
success: function(conn, response, options, eOpts) {
Ext.getBody().unmask();
var data = Util.decodeJSON(conn.responseText);
/* Apply REST WebServices response Metadata to the Grid */
var recordsMetaData = data.getConfigurationAndDataReplyType.gridConfigDataResponse.data.record;
var jsonMetaDataArray = [];
for (var c = 0; c < recordsMetaData.length; c++) {
var jsonMetaDataObject = {};
var text = data.getConfigurationAndDataReplyType.gridConfigDataResponse.data.record[c].displayName;
var dataIndex = data.getConfigurationAndDataReplyType.gridConfigDataResponse.data.record[c].columnName;
jsonMetaDataObject["text"] = text;
jsonMetaDataObject["dataIndex"] = dataIndex;
jsonMetaDataArray.push(jsonMetaDataObject);
}
/* Apply REST WebServices response data to the Grid */
var recordsData = data.getConfigurationAndDataReplyType.gridDataResponse.record;
var jsonDataArray = [];
for (var r = 0; r < recordsData.length; r++) {
var columnsData = data.getConfigurationAndDataReplyType.gridDataResponse.record[r].column;
var jsonDataObject = {};
for (var c = 0; c < columnsData.length; c++) {
jsonDataObject[columnsData[c].columnId] = columnsData[c].columnValue;
}
jsonDataArray.push(jsonDataObject);
}
store.setData(jsonDataArray);
genericGrid.reconfigure(store, jsonMetaDataArray);
},
failure: function(conn, response, options, eOpts) {
Ext.getBody().unmask();
Util.showErrorMsg(conn.responseText);
}
});
store.load();
}
});
renderGridMetadata:function(genericGrid){
var store=Ext.getStore(“DemoApp.store.GenericGrid”),
gridId=genericGrid.up().gridId,
resourceURL=“resources/data/”+gridId+“.json”;
var serviceInput=Util.createServiceResponse(gridId);
/*将代理URL动态添加到ViewModel
DemoApp.model.GenericGrid.getProxy().setUrl(resourceURL)*/
Ext.getBody().mask(“正在加载…请稍候…”,“正在加载”);
Ext.Ajax.request({
url:Util.localGridService,
方法:“POST”,
标题:{
“内容类型”:“应用程序/json”,
“SM_用户”:“arun.x.kumar。ap@nielsen.com',
“SM_服务器会话ID”:“asdfadsf”
},
jsonData:{
getConfigurationAndDataRequestType:serviceInput
},
成功:功能(连接、响应、选项、EOPT){
Ext.getBody().unmask();
var data=Util.decodeJSON(conn.responseText);
/*将REST WebServices响应元数据应用于网格*/
var recordsMetaData=data.getConfigurationAndDataReplyType.gridConfigDataResponse.data.record;
var jsonMetaDataArray=[];
对于(var c=0;c
很可能只有一个DemoApp.store.GenericGrid实例
坦率地说,我只是猜测,因为我看到您调用Ext.getStore(“DemoApp.store.GenericGrid”)
,这意味着存储在stores:[“DemoApp.store.GenericGrid”]
数组中声明,可能在应用程序类中
如果以这种方式声明存储,则Ext会自动创建一个实例,将storeId设置为stores:[]
中列出的字符串。因此,Ext.getStore()
返回该实例
如果你想拥有两个独立的网格实例,你最好自己在
initComponent
override中创建存储实例。我使用Ext.create('DemoApp.store.GenericGrid')而不是Ext.getStore()。成功了是的,成功了。如果有帮助,请接受答案。