ExtJS:第二个模态窗口导致错误:未捕获TypeError:无法读取null的属性'addCls'

时间:2013-07-24 03:31:39

标签: extjs extjs4.1

我收到错误:“Uncaught TypeError:在以下情况中无法读取属性'addCls'的null”。

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

  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”属性

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

以前任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:8)

将closeAction设置为隐藏,不确定为什么默认值是destroy,但它实质上意味着当窗口关闭时,元素将从dom中删除,而show将不再起作用。

http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.panel.Panel-cfg-closeAction

回复评论:

条件创建示例

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

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

updateWindowData();
this.win.show();

不是说closeAction:'hide'到处都是,我们在源代码中有这样的东西

Ext.override(Ext.Window, {
    closeAction: 'hide'
})

如果您在创建任何窗口之前放置该片段,则默认情况下所有窗口都将为closeAction隐藏。

答案 1 :(得分:1)

设置

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