我正在以编程方式创建DOJO TabContainer和要添加到tabContainer的ContentPanes。每个contentPanes都包含我的自定义小部件。部分代码如下所示。显示选项卡时,第一个选项卡上的containerNode的高度为0px,即使第一个选项卡具有完全加载的窗口小部件,但它不会显示在浏览器中。 这曾经在1.6中正常工作。我已经将dojo 1.6替换为1.9.3并遇到了这个问题。有什么想法吗?
var availableWidgets = {
'Name': {title: 'Name', widget:'test.ui.NameWidget'},
'Stats': {title: 'Stats', widget:'test.ui.StatsWidget'}
};
postCreate: function(){
var tabContainer = new dijit.layout.TabContainer({controllerWidget: "dijit.layout.TabController"}, this.pContainerDiv);
tabContainer.set('class', 'claro');
tabContainer.set('doLayout', false);
tabContainer.set('style', "width: 100%; height: 100%;");
dojo.forEach(this.menuItems, dojo.hitch(this, function(menuItem, index){
var widgetInfo = availableWidgets[menuItem];
if(widgetInfo != null){
var contentPaneId = portletNamespace + pContext.persistentId + menuItem + 'ContentPane';
var contentPane = new dijit.layout.ContentPane({
id: contentPaneId,
title: widgetInfo.title,
selected: currentSelectedItem == menuItem,
closable: false,
style: 'height:100%;padding: 15px;',
onShow: dojo.hitch(this, function(){
//can no longer do this in 1.9
//dojo.require(widgetInfo.widget);
if (widgetInfo.widget == 'test.ui.NameWidget') {
dojo.require("test.ui.NameWidget");
} else if (widgetInfo.widget == 'test.ui.StatsWidget') {
dojo.require("test.ui.StatsWidget");
}
var currentView = this.widgets[widgetInfo.title];
if(!currentView){
currentView = eval('new ' + widgetInfo.widget + '(this.params)');
currentView.placeAt(contentPaneId, 'last');
// startup called by (dijit/_WidgetBase in 1.9.3) by placeAt above
// currentView.startup();
this.widgets[widgetInfo.title] = currentView;
}
})
});
tabContainer.addChild(contentPane);
}
}));
}
答案 0 :(得分:0)
我会在将小部件添加到内容窗格后尝试在内容窗格上调用.resize()。这应该正确调整内容窗格的大小。在将一个子项添加到contentPane之后,另一个选择是在tabcontainer上调用.resize()。
答案 1 :(得分:0)
我有一个修复。在将内容窗格添加到选项卡容器之前,我现在调用:
tabContainer.startup();
使用dojo 1.6时,我在将所有内容窗格添加到选项卡容器后执行此操作。在修复高度问题之前调用此方法并使用dojo 1.9.3正确呈现所有选项卡。