Клуб API Карт

Интеграция с GWT - поставить Placemark

Александр Боровков
4 июня 2015, 09:22

Получается загрузить карту, сменить центр. Но при работе с PlaceMark возникает ошибка 

 

    function GeoObject (feature, options) {
        this.geometry = componentCastGeometry(feature && feature.geometry);
        this.properties = componentCastProperties(feature && feature.properties);
        this.state = new DataManager();
        this.options = new OptionManager(options, null, 'geoObject', geoObjectOptionMapper);
        this.events = new EventManager({
            context: this
        });
        this._geoObjectComponent = this.createGeoObjectComponent(); //<--------------  Здесь
    }



Ловлю

 

SCRIPT438: Объект не поддерживает свойство или метод "createGeoObjectComponent" 
combine.xml, строка 26381 символ 9

т.е. каким то образом этот конструктор вызывается когда в this нет методов определных в defineClass 

  

 Введите содержимое врезки

 

Некотрые цитаты из gwt кода:

ScriptInjector
    .setWindow(ScriptInjector.TOP_WINDOW)
    .setCallback(new Callback<Void, Exception>() {
        @Override
        public void onFailure(Exception reason) {
            ErrorHandler.handle(reason);
        }
        @Override
        public void onSuccess(Void result) {
            initJs(id);
        }
    }).inject();
//...
    protected native void initJs(String id) /*-{
        var ymaps = $wnd.ymaps;
        ymaps.ready(init);
        var _this = this;
        function init() {
            _this.@ru.cft.qpay.admin.webapp.client.ui.widget.YandexMapWidget::map = new ymaps.Map(id, {
                center: [55.76, 37.64],
                zoom: 7
            });
            _this.@ru.cft.qpay.admin.webapp.client.ui.widget.YandexMapWidget::setReady()();
        }
    }-*/;
//...
  protected native void setMarker(double latitude, double longitude)/*-{
        var ymaps = $wnd.ymaps;
        var placeMark = ymaps.Placemark([latitude, longitude]);
        this.@ru.cft.qpay.admin.webapp.client.ui.widget.YandexMapWidget::map.geoObjects.add(placeMark);
    }-*/;
5 комментариев
Всеволод Шмыров
4 июня 2015, 11:06
Доброе утро! ymaps.Placemark - это конструктор. Соответственно нужно вызывать конструкцию "new".

А можете подробнее описать ваш проект?
Александр Боровков
4 июня 2015, 11:21
Спасибо! Конечно я очень протупил. Java меня разбаловала - там так не напишешь=) А что именно вас интересует? Использование GWT? Боюсь суть проекта рассказать по этическим причинам не смогу
Всеволод Шмыров
4 июня 2015, 11:25
Ну я хотел просто тип уточнить. Это приложение, какой-то виджет? Он будет в магазине приложений?
Александр Боровков
4 июня 2015, 11:31

Не совсем понял какое приложение вы имеете ввиду? тут под виджетом понимается GWT-обертка для карт. Подробней

http://www.gwtproject.org/doc/latest/RefWidgetGallery.html
http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html

Пример для старого API

Всеволод Шмыров
4 июня 2015, 11:32
Понял. Спасибо. Я не совсем представлял, что такое GWT. Теперь разобрался