Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ExtJS:在tabpanel的底层存储为空时,从其中删除网格_Javascript_Extjs_Grid_Listener - Fatal编程技术网

Javascript ExtJS:在tabpanel的底层存储为空时,从其中删除网格

Javascript ExtJS:在tabpanel的底层存储为空时,从其中删除网格,javascript,extjs,grid,listener,Javascript,Extjs,Grid,Listener,我有一个TabPanel,其中包括一个连接到商店的网格 几个事件可能会从存储中删除元素 我希望在存储区为空时从TabPanel中删除网格,并且可能在代码中有一个位置来检查此事件 我曾考虑过使用存储侦听器,但不幸的是,这会导致Ext代码出现异常。 我的假设是,发生这种情况是因为在从选项卡面板中删除网格后,会在网格上执行渲染 任何关于如何在不破坏Ext的情况下完成这样一项任务的想法都是值得赞赏的。 谢谢: 顺便说一下,这是一段代码摘录: var myStore = new Ext.data.Stor

我有一个TabPanel,其中包括一个连接到商店的网格

几个事件可能会从存储中删除元素

我希望在存储区为空时从TabPanel中删除网格,并且可能在代码中有一个位置来检查此事件

我曾考虑过使用存储侦听器,但不幸的是,这会导致Ext代码出现异常。 我的假设是,发生这种情况是因为在从选项卡面板中删除网格后,会在网格上执行渲染

任何关于如何在不破坏Ext的情况下完成这样一项任务的想法都是值得赞赏的。 谢谢:

顺便说一下,这是一段代码摘录:

var myStore = new Ext.data.Store({
 reader: new Ext.data.JsonReader({fields: MyRecord}),
 listeners:{
  'clear': function(store, recs) {
   myTabPanel.remove(myGrid);
  },
  'remove': function(store, rec, idx) {
   if (store.getCount() == 0) {
    myTabPanel.remove(myGrid);
   }
  }
 }
});

var myGrid = new Ext.grid.GridPanel({
 id: "myGrid",
 title: "A Grid",
 store: myStore,
 frame:false,
 border:false,
 columns: [
 {
  header: 'Remove',
  align:'center',
  width: 45,
  sortable: false,
  renderer: function(value, metaData, record, rowIndex, colIndex, store) {
   return '<img src="images/remove.png" width="34" height="18"/>';
  }
 },{
  header: 'Some Data',
  dataIndex: 'data',
  sortable: true
 }
 ],
 listeners:{
  'cellclick':function(grid, rowIndex, colIndex, e){
   var rec = myStore.getAt(rowIndex);
   if(colIndex == 0){
    myStore.remove(rec);
   }
  }
 } 
});

var myTabPanel= new Ext.TabPanel({ 
 activeTab: 0,
 items: [ fooPanel, barPanel, myGrid]
});

您从选项卡中物理删除网格的任何原因?这似乎是一个奇怪的用户界面范例——为什么不用一条空消息保持空网格呢


无论如何,我认为您使用存储事件和记录计数来确定何时删除它的方法基本上是可以的。您可能想知道如何解决您所说的任何错误。它们是什么?

问题解决了:我只需删除网格,将autoDestroy参数设置为false。 修正了下面的代码

var myStore = new Ext.data.Store({
 reader: new Ext.data.JsonReader({fields: MyRecord}),
 listeners:{
  'clear': function(store, recs) {
   myTabPanel.remove(myGrid, false);
  },
  'remove': function(store, rec, idx) {
   if (store.getCount() == 0) {
    myTabPanel.remove(myGrid, false);
   }
  }
 }
});

var myGrid = new Ext.grid.GridPanel({
 id: "myGrid",
 title: "A Grid",
 store: myStore,
 frame:false,
 border:false,
 columns: [
 {
  header: 'Remove',
  align:'center',
  width: 45,
  sortable: false,
  renderer: function(value, metaData, record, rowIndex, colIndex, store) {
   return '<img src="images/remove.png" width="34" height="18"/>';
  }
 },{
  header: 'Some Data',
  dataIndex: 'data',
  sortable: true
 }
 ],
 listeners:{
  'cellclick':function(grid, rowIndex, colIndex, e){
   var rec = myStore.getAt(rowIndex);
   if(colIndex == 0){
    myStore.remove(rec);
   }
  }
 } 
});

var myTabPanel= new Ext.TabPanel({ 
 activeTab: 0,
 items: [ fooPanel, barPanel, myGrid]
});