Проблема с GWT TabPanel и Google Maps - PullRequest
2 голосов
/ 09 июня 2010

Работа с Google Web Toolkit (с расширением Google Maps) У меня возникла небольшая проблема:

Я хочу вставить карту Google в TabLayoutPanel.Без этого TabLayoutPanel все работало нормально.Но как только карта находится внутри вкладки, она ведет себя очень странно (она не центрирована вправо и «прыгает» при попытке прокрутки.).

Та же проблема возникает при использовании TabPanel вместо TabLayoutPanel.

извлечение из моего кода:

в onModuleLoad - метод моего класса EntryPoint:

    DockLayoutPanel mainPanel;
    MainUITabs tabWidget = new MainUITabs();
    mainPanel.add(tabWidget);
    RootLayoutPanel.get().add(mainPanel);

MainUITabsWiget выглядит примерно так:

public class MainUITabs extends Composite {

public MainUITabs(){
    TabLayoutPanel tabPanel = new TabLayoutPanel(10, Unit.PCT);

    MapWidget googleMapsTab = buildMapWidget();

    tabPanel.add(googleMapsTab, "Google Maps");

    initWidget(tabPanel);
}

private MapWidget buildMapWidget() {

    LatLng coord = LatLng.newInstance(51.509, 11.434);
    final MapWidget map = new MapWidget(coord, 2);
    map.setSize("600px", "300px");
    map.setCenter(coord);

    map.addControl(new LargeMapControl());  

    map.addOverlay(new Marker(coord));

    return map;
}

}

Похоже, что Карта не любит находиться во вкладке ... Есть ли у кого-нибудь идеи, где может быть проблема?

Спасибо.

Энди

Ответы [ 2 ]

0 голосов
/ 09 июня 2010

Документы TabPanel говорят, что «Этот виджет будет только работать в режиме причуд. Если ваше приложение находится в режиме стандартов, используйте взамен TabLayoutPanel».

Итак, если ваша страница имеет DOCTYPE и, следовательно, находится в режиме стандартов, это говорит о том, что у вас возникнут проблемы.

Я обнаружил, что при использовании TabPanel в стандартном режиме виджеты на вкладках после первой (которые сначала не видны) не всегда корректно отображаются. Обходным решением было визуализировать эти элементы при отображении вкладки с помощью SelectionHandler.onSelection, как отмечено в документации для устаревшего метода TabPanel#onTabSelected. Но читая бит, который я цитировал выше, это, вероятно, вызывает проблемы, и в Стандартном режиме вы должны вместо этого использовать TabLayoutPanel.

0 голосов
/ 09 июня 2010

На первый взгляд это похоже на проблему, с которой я столкнулся при интеграции TinyMCE (WYSIWYG-редактор) с GWT - обычно такие компоненты не нравятся при изменении DOM - в этом случае это происходит при переключении вкладок (в в моем случае это было перетаскивание).
IIRC, решение состояло в том, чтобы удалить виджет TinyMCE из текстового поля, которое он оборачивал, когда его не отображали на экране. В вашем случае вы хотите удалить MapWidget из tabPanel, , пока он не отображается . Я недостаточно знаком с API Карт Google, чтобы знать, есть ли назначенный метод для этого, но вы можете попробовать простой tabPanel.remove(googleMapsTab);.

...