GWT: вызов функции JSNI для getElementById () возвращает ноль - PullRequest
1 голос
/ 10 апреля 2011

Я пытаюсь использовать JSNI для отображения карты Google в приложении. Я определил сценарий на моей странице index.html.

Вот определение uibinder (вычеркнутое к основам):

<g:HTMLPanel ui:field="mapboxV3ContentPanel">
    <!-- div for display of the actual map -->
    <div id="map"><!-- --></div>
</g:HTMLPanel>

Вот встроенная функция initializeMap ():

private native void initializeMap() /*-{

    var latLng = new $wnd.google.maps.LatLng(-34.397, 150.644);
    var mapOptions = {
        zoom: 8,
        center: latLng,
        mapTypeId: $wnd.google.maps.MapTypeId.ROADMAP
    };
    var mapDiv = $doc.getElementById('map');
    if (mapDiv==null) {
        alert("MapDiv is null!");
    }
    var map = new $wnd.google.maps.Map(mapDiv, mapOptions);
}-*/;

К сожалению, mapDiv является нулевым. Любая помощь там?

Мне известны проекты gwt-maps и gwt-maps-v3. Первый поддерживает только v2 API, и gwt-maps-v3 не будет работать для меня, следовательно, подход JSNI.

1 Ответ

3 голосов
/ 10 апреля 2011

В принципе, ваш код должен работать, и я быстро его протестировал (кстати, он вообще не должен быть связан с API Карт Google).

Единственное, что важно, эточто вы добавляете <div id="map"> к документу , прежде чем позвонить initializeMap().

. Попробуйте следующее:

@Override
public void onModuleLoad() {

  RootPanel.get().add(new MyUiBinderWidget()); // your widget with the map div
  initializeMap();
}

Обратите внимание, что вы можете 'Вызвать initializeMap() из конструктора MyUiBinderWidget, потому что в этот момент виджет еще не прикреплен к документу.

...