dojo TabContainer部件不显示

1 篇文章 0 订阅
1 篇文章 0 订阅
       最近在做一个关于ArcGIS API for JavaScript框架,然后我的一个widget需要用到了dojo TabContainer部件,我在body标签里直接添加我的widget是能够正常使用的,但是将其他widget调用我的widget就显示不出来了。明明是按照dojo官方文档的代码来写的,但就是出不来,也没有报错。用控制台查看HTML,发现页面是有内容的,但是无论我怎么在控制台中修改那些HTML的样式都没有任何元素显示出来,只有当我改变浏览器窗口的大小时,这个部件才能显示出来。

       接着在Google也找到了相关的提问(通常不到万不得已,我都不会上谷歌,这次真的没辙了),回复比较多的的就这篇了吧 Tab Container widget won't appear until window is resized。大概花了一天的时间把那些方法都尝试过了,但是还是没有解决,其中有一个解决方案是在TabContainer部件外面包裹一个BorderContainer部件,是可以出来,但是TabContainer部件的几个功能按钮布局都乱了,本来想尝试通过控制样式把那些按钮的布局调回来,但是发现那些按钮使用起来还会有一些问题,所以就放弃了。另一个解决方案是设置TabContainer部件的doLayout属性为false,但也只能把第一个ContentPane显示出来,选项卡和按钮都没出来,还是改变浏览器窗口的大小时才会出现。调用TabContainer部件的resize方法也有人提,但是和设置doLayout属性为false的效果一样。

       这一天什么都没做,耽误了很多事,本来想想放弃这个部件吧,但是组长还是坚持要用这个部件,毕竟是框架,要严格按照设计文档的要求开发。所以真的走投无路了,调试源码吧。经过一个上午的调试找到了解决方案,其实也是和Google上回答的差不多,调用TabContainer部件的resize方法,但是不能在部件startup后直接执行,需要延迟执行(在setTimeout中执行),延迟的时间设置为30毫秒就可以了。

       调试源码过程中发现之所以改变浏览器窗口的大小时部件能显示出来,是因为部件内部监听了window的onresize事件,然后再监听方法中调用了部件的resize方法(也是使用setTimeout进行延迟调用),然后就显示出了。

       至于问题的根本原因我也很想深究下去,但是这两天的确耽误了很多事,所以得到了解决方案只能继续赶路了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值