Клуб API Карт

Ошибка TypeError с new this._overlayClass при работе редактора мультимаршрута

Пост в архиве.

API ver. 2.1. Использую ymaps.modules.require, вывожу нужные модули по требованию. Весь функционал запускается внутри spread-функции.

Есть проблема с построением таким образом мультимаршрута (multiRouter.MultiRout) с возможностью редактирования (multiRouter.Editor).

Описанный в документации метод start для multiRoute.editor не подходит, ведь гружу отдельно 'multiRouter.MultiRoute' и 'multiRouter.Editor'.

Делаю так:

 

ymaps.modules.require([..., 'multiRouter.MultiRoute', 'multiRouter.Editor']).spread(function (..., MultiRouter, Editor) { ...

  ymaps.MultiRouter = new MultiRouter({ ... });

  myMap.geoObjects.add(ymaps.MultiRouter);

  new Editor(ymaps.MultiRouter); // или в середине двух строчек выше

}));

 

Мультимаршрут строится, но периодически - либо во время загрузки карты, либо после перетаскивания wayPoints - в консоли вижу ошибку:

Uncaught TypeError: undefined is not a function, строка 13919 (api mode=Debug)

>> overlay = new this._overlayClass(this._geometry.getPixelGeometry(), overlayData); // внутри метода _setupOverlay, из функции defineClass(View, { ... }), из модуля geoObject.View (modules.define("geoObject.View",  ...));

Всё бы ничего, но если после этой ошибки скрыть мультимаршрут с карты, а потом снова показать, ничего не появится. А функционал нужен именно такой: скрыть/показать по кнопке.

Подскажите, как правильно работать с мультимаршрутом внутри modules.require ?!

 

2 комментария

Проблема в том, что нужно еще связать опции редактора с опциями мультимаршрута, чтобы редактор брал их значения из мультимаршрута. Это на самом деле одна из обязанностей аддона. Зачем вам это реализовывать самому? Просто подключаейте вместо редактора "multiRouter.editor.addon" и у вас будет .editor у созданного мультимаршрута.
Еще зачем вы перетираете ymaps.MultiRouter экземпляром мультимаршрута. Хотя у вас нет ymaps.MultiRouter, т.к. вы его в глобальную ymaps не подключаете, но все равно лучше экземпляры хранить где-то в другом месте.

За multiRouter.editor.addon отдельное спасибо! Теперь хоть можно обратиться к редактору через multiRoute.editor.start();

Вроде даже ошибка пропала!

И Вы правы: хранить экземпляры объектов в ymaps - не лучший вариант.