我编写了非常基本的GWT应用程序,其中SmartGWt选项卡在两个选项卡上都使用标签进行渲染。
我面临的问题是,当我将基于GWT的标签放在第二个选项卡并重新加载应用程序时,第一个选项卡呈现基于SmartGWT的标签,但是当我点击第二个选项卡查看GWT标签时,它不会出现,也是我很惊讶为什么第一个标签内容被删除,因为它在点击第二个标签之前出现了。
请查看下面的代码。
package com.test.client;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.tab.Tab;
import com.smartgwt.client.widgets.tab.TabSet;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
public class TestGWT implements EntryPoint
{
public void onModuleLoad()
{
TabSet tabSet = new TabSet();
tabSet.setWidth("400px");
Tab tab1 = new Tab("Tab1");
Canvas pane = new Canvas();
pane.addChild(new com.smartgwt.client.widgets.Label("test label"));
tab1.setPane(pane);
Tab tab2 = new Tab("Tab2");
Canvas pane2 = new Canvas();
pane2.addChild(new Label("test label2")); // I need to put GWT widget in SmartGWT tab but it does not render in this tab. Also, it removes contents from first tab
tab2.setPane(pane2);
tabSet.addTab(tab1);
tabSet.addTab(tab2);
RootPanel.get("testid").add(tabSet);
}
}
当我将第二个SmartGWT选项卡设置为首先出现具有GWT小部件时,事情正常。
我正在使用GWT-2.6.1
请在这里分享您的想法!
此致 Shobhit
答案 0 :(得分:2)
虽然我同意问题的原因为RootPanel.get("testid").add(tabSet)
,但解决方案是用以下内容替换该行:
tabSet.show();
请记住,在SmartGWT中,您应该使用add()
将组件添加到其他组件。尝试使用其ID添加组件很容易出错。
最后,请记住,Isomorphic不鼓励将SmartGWT的组件与其他库中的组件混合使用。虽然这有时是不可避免的,但如果你可以在你的应用程序中避免它,你应该,因为这是一个非常常见的bug来源。请参阅下面的评论,了解这些声明的其他来源。
答案 1 :(得分:0)
问题是将TabSet添加到RootPanel。所以你收到了
具有现有父窗口小部件的窗口小部件可能无法添加到分离列表中。
错误。
将RootPanel.get("testid").add(tabSet);
更改为
tabSet.setHtmlElement((Element) Document.get().getElementById("testid"));
tabSet.draw();
它会正常工作。