2016-08-12 4 views
0

Я написал очень основное приложение GWT, где вкладки SmartGWt визуализируются с меткой на обеих вкладках.Вкладка SmartGWT, теряющая содержимое на основе GWT

Проблема, с которой я столкнулся, заключается в том, что когда я помещал метку на основе 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

Какую версию SmartGWT вы используете? – mxlse

+0

Его SmartGWT 5.0p –

+0

Мой ответ был протестирован с SmartGWT 2.4 и 5.0p - обе версии работают нормально. – mxlse

ответ

0

Проблема добавления TabSet к RootPanel. Таким образом, вы получаете

Виджет с существующим родительским виджемом не может быть добавлен в список отсоединения.

погрешность.

Изменение RootPanel.get("testid").add(tabSet); в

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

, и он будет работать нормально.

2

Хотя я согласен на причину проблемы будучи RootPanel.get("testid").add(tabSet), решение заменить эту строку с:

tabSet.show(); 

Имейте в виду, что в SmartGWT, вы должны добавить компоненты к другим компонентам с помощью add(). Попытка добавления компонентов с использованием их идентификаторов подвержена ошибкам.

Наконец, имейте в виду, что Isomorphic препятствует смешиванию компонентов SmartGWT с компонентами из других библиотек. Иногда это неизбежно, если вы можете избежать этого в своем приложении, вы должны, потому что это очень распространенный источник ошибок. См. Мои комментарии ниже для получения дополнительных источников для этих претензий.

+0

Извините, что не согласен, но это добавит tabSet к RootPanel, а не к '# testid'-Div, поэтому структура будет отличаться, и результат может выглядеть очень сильно. Только если tabSet не следует добавлять в определенный div, ваш ответ также верен. :-) – mxlse

+0

См. Http://imgur.com/a/p8dPF для разницы (изображения отсутствуют, поэтому игнорируйте это - речь идет о позиции) – mxlse

+0

@mxlse Я попытался выполнить свое решение в коде OP, и он работал правильно. Вы принимаете то, о чем OP не упоминает, и на основе этого полагается downvoting. – carlossierra