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()。成功了是的,成功了。如果有帮助,请接受答案。