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

SmartGWT tab losing GWT based contents

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

请在这里分享您的想法!

此致, 肖特

问题是将 TabSet 添加到 RootPanel。所以你收到一个

A widget that has an existing parent widget may not be added to the detach list.

错误。

RootPanel.get("testid").add(tabSet);改为

tabSet.setHtmlElement((Element) Document.get().getElementById("testid"));
tabSet.draw();

它会正常工作。

尽管我同意问题的原因是 RootPanel.get("testid").add(tabSet),但解决方案是将该行替换为:

tabSet.show();

请记住,在 SmartGWT 中,您应该使用 add() 将组件添加到其他组件。尝试使用其 ID 添加组件很容易出错。

最后,请记住 Isomorphic 不鼓励将 SmartGWT 的组件与来自其他库的组件混合使用。虽然这有时是不可避免的,但如果您可以在您的应用程序中避免它,您应该这样做,因为这是一个非常常见的错误来源。有关这些声明的其他来源,请参阅下面我的评论。