SmartGWT选项卡丢失基于GWT的内容

时间:2016-08-12 08:31:44

标签: gwt smartgwt

我编写了非常基本的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

2 个答案:

答案 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();

它会正常工作。