Rooock 2009-08-25 21:43
浏览 288
已采纳

Ext.TabPanel和contentEl组合使用时.关闭一个tab然后再次打开报错的问题~~

目前我有一个TabPanel.假设当前有两个Tab好了.tabA和tabB.
[code="js"]
var tabA = new Ext.Panel({
contentEl:'divA'
});
var tabB = new Ext.Panel({
contentEl:'divB'
});

var tabPanel = new Ext.TabPabel({
deferredRender: false,
activeTab: 0,

enableTabScroll:true,
defaults: {autoScroll:true},
viewConfig: {forceFit: true},
plugins: new Ext.ux.TabCloseMenu()
});
[/code]

我是通过触发别的点击的将tabA和tabB加入进来的,加入的时候没问题,是OK的.
[code="js"]
// 加入tab前,先判断它是否存在.如果已存在.则激活它但不创建;
// 如果tab不存在,则创建它,并使之处于激活状态
var tab = tabPanel .getComponent(currentTabId);
if(!tab)
{
// 在中央面板上创建新主题
tabPanel.add(tab);
}
tabPanel.setActiveTab(tab);
[/code]

这样,通过以上以上的代码,我的TabPanel上将会有两个tab: tabA和tabB.
[color=darkblue]值得注意的是.tabA和tabB都有contentEl属性.
分别指定了jsp上的

[/color]

然后我点击其中某一个tab上的XX按钮将其关闭.OK.正常.

[color=darkblue]接着我再通过点击事件创建刚关闭的tab.就出问题了.[/color]
[color=red]出的错是:
Ext.fly(ce) is null
http://{myproject:port}/ext/ext-all-debug.js
Line 22107[/color]

[color=darkblue]我十分确定是contentEl属性的原因.
因为我将这属性注释掉,创建,删除,再创建tab,是没问题的.[/color]

-----------------------------------我是分割线----------------------------------

以上是一个问题,很关键,很重要.
因为我觉得下面这个问题和它有莫大的关系.

呃...是酱紫的~

小弟我在用fusionchart做报表.

还是上面说的tabPanel.
当前有两个tab.每一个tab都有contentEl对应jsp上的div.
这个div我是用来显示图形的...
大致的代码如下:
[code="js"]
var chart = new FusionCharts("MSColumn3DLineDY.swf", "ChartId", "100%", "100%");

Ext.Ajax.request({
url :'myAction!method.action',
success :function(result,request){
chart.setDataXML(eval('('+result.responseText+')').chartXml);
// 将fusioncharts渲染到jsp中的div中
chart.render("divA");
}
});

var tabA = new Ext.Panel({
// 这个panel包含jsp上的一个的div
contentEl:'divA'
});
[/code]

OK.代码就是那样子..我们创建一个tab,OK.关闭它,OK.
[color=red]再创建...问题来了,ff报错是:
n is null
http://{myproject:port}/fusioncharts/JSClass/FusionCharts.js
Line 234[/color]

我觉得啊..因为有第一个错,所有导致了第二个错同时发生.
而第一个错为什么会发生呢,就是因为[color=red]它contentEl了一个div.
当这个tab被删除之后,相应的div也随之没了??[/color] 这是我的猜想...
[color=red]所以再次创建的时候,要contentEl那个div,但是已经没了,就出错.[/color]

这是我的猜想,不知道对不对.
当前我还没想到好的解决办法.请GG们给我点明示...

  • 写回答

3条回答

  • zhoujuan520 2009-08-26 08:26
    关注

    你在success里面判断tab页存在与否,如果不存在则创建之激活之,否则激活则以,而后渲染到tab页的body即可,不需要contentEl属性,contentEl 就是 panel.body,你也可以这样阿
    [code="js"]
    tab页 = {
    html:'

    '
    }[/code]

    你只要保证渲染报表的时候tab页是存在的,把渲染和创建tab页放到一个方法中去就可以了.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况