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
ExtJS:导致错误的第二个模式窗口:未捕获类型错误:无法读取属性';addCls';空的_Extjs_Extjs4.1 - Fatal编程技术网

ExtJS:导致错误的第二个模式窗口:未捕获类型错误:无法读取属性';addCls';空的

ExtJS:导致错误的第二个模式窗口:未捕获类型错误:无法读取属性';addCls';空的,extjs,extjs4.1,Extjs,Extjs4.1,我得到了以下错误:“uncaughttypeerror:无法读取null的属性'addCls' 我需要两个模态窗口。第一个模态窗口有一个网格。当我双击第一个模态窗口中的网格时,我应该打开第二个模态窗口。下面是我使用的代码: saleOrderEmployeeGrid.on('celldblclick', function(tableview, td, cellIndex, record, tr, rowIndex, e, eOpts){ loadActivityWindow();

我得到了以下错误:“uncaughttypeerror:无法读取null的属性'addCls'

我需要两个模态窗口。第一个模态窗口有一个网格。当我双击第一个模态窗口中的网格时,我应该打开第二个模态窗口。下面是我使用的代码:

  saleOrderEmployeeGrid.on('celldblclick', function(tableview, td, cellIndex, record, tr, rowIndex, e, eOpts){
    loadActivityWindow();
  });
  }

  function loadActivityWindow()
  {
        jobSlotActivityWin = new Ext.Window({
        id          :'jobSlotActivityWinId',
        modal       : true,
        layout      : 'fit',
        width       : 900,
        height      : 500,
        closeAction :'destroy',
        plain       : true,
        model       : true,
        stateful    : false,
        title       :'Create Job Slot',
        items       : [soActivityPanel],
        buttons     : [{
            text        : 'Close',
            handler     : function(){
                            jobSlotActivityWin.destroy();
                        }
            }
        ] 
        });
        jobSlotActivityWin.show();
        Ext.WindowManager.register (createJobSlotWin); // createJobSlotWin is the first modal window
        Ext.WindowManager.register(jobSlotActivityWin); // jobSlotActivityWin is the second modal window created above
        Ext.WindowManager.bringToFront ('jobSlotActivityWinId');
  }
因此,当我双击saleOrderEmployeeGrid时,我可以看到第二个模式窗口。然后关闭第二个模态窗口,在第一个模态窗口上再次双击网格

现在不会显示第二个模态窗口。它在第一个模态窗口的背景中完全被屏蔽和空白,我在JavaScript控制台中看到以下错误: 未捕获的TypeError:无法读取null的属性“addCls”

更准确地说,错误似乎来自jobsloticvitywin.show(),因为我的调试日志当时失败了


以前有人遇到过这种情况,可以帮助我吗?

将closeAction设置为隐藏,不确定默认值为何为destroy,但它的基本意思是当窗口关闭时,元素将从dom中删除,并且
show
将不再工作

对评论的答复:

条件创建示例

//the window is only created once, the data is always show and updated.

if(!this.win) {
    this.win = createWindow();
}

updateWindowData();
this.win.show();
不要说closeAction:“到处隐藏”,我们在源代码中有类似的内容

Ext.override(Ext.Window, {
    closeAction: 'hide'
})
如果在创建任何窗口之前放置该代码段,默认情况下,所有窗口都将被关闭操作隐藏。

set

   closeAction:'hide',
   onEsc: funtion() {
       jobSlotActivityWin.hide()
   }

@Rajugadu是的,它不会工作,因为您的处理程序正在直接调用
destroy
。它应该调用
close
。此外,全局、硬编码id和不检查窗口是否存在的盲创建也是错误的<代码>新窗口,新窗口具有相同id的将抛出一个错误,我相信。@Rajugadu有条件地创建并取出
销毁
“应该”解决您看到的问题。@Rajugadu所有窗口都必须将closeAction设置为隐藏,默认设置为销毁。窗口只应创建一次,但每次都应更新数据。我将放一个额外的代码片段来说明我在说什么。保持实例的活动性并不比在客户机上执行的任何其他操作更危险。这是首选的方法,效率更高。@Rajugadu在创建任何窗口之前,取出所有包含closeAction的代码,并将
Ext.Override
片段放在代码的“顶部”。@Rajugadu关于WindowManager的最后3行没有也不应该使用,Ext应该处理这个问题。