TabPanel非首显页不能完全渲染的问题解决
最近在用Coolite 0.8.2做系统,在用到TabPanel的时候发现,只要不是页面加载即显示的标签页并且使用了ColumnLayout或者FormLayout布局的话,在切换到这些标签页的时候,这些布局内的Text控件和ComboBox控件的显示都不全,网上查找说设置LayoutOnTabChange为 true可以解决该问题,但是很不幸,该方法无效,后来经过摸索试验,发现只要在标签切换时针对这些布局的上层容器控件(一般是一个普通Panel或者 FormPanel)执行doLayout即可解决这个问题.
先增加如下js函数:
<script type="text/javascript">
function reLayout() {
setTimeout(function() { FormPanel1.doLayout(false, true); }, 0);
}
</script>
我在这里简单封装了一下,这样如果有很多页,可以都在这里完成重新布局操作.这里 FormPanel1就是FormLayout布局的上层容器,然后在标签切换激活事件Activate中编写代码调用reLayout函数即可:
<ext:Tab ID="Tab4" runat="server" Title="Tab 2">
<Listeners>
<Activate Handler="reLayout();" />
</Listeners>
当然上面Handler里的代码也可以直接写 FormPanel1.doLayout(false, true);
具体请参看示例工程,下载示例工程代码解压,在VS2008中打开直接运行即可.
先增加如下js函数:
<script type="text/javascript">
function reLayout() {
setTimeout(function() { FormPanel1.doLayout(false, true); }, 0);
}
</script>
我在这里简单封装了一下,这样如果有很多页,可以都在这里完成重新布局操作.这里 FormPanel1就是FormLayout布局的上层容器,然后在标签切换激活事件Activate中编写代码调用reLayout函数即可:
<ext:Tab ID="Tab4" runat="server" Title="Tab 2">
<Listeners>
<Activate Handler="reLayout();" />
</Listeners>
<Body>
......
</Body>
当然上面Handler里的代码也可以直接写 FormPanel1.doLayout(false, true);
具体请参看示例工程,下载示例工程代码解压,在VS2008中打开直接运行即可.