Клуб API Карт

открытие балуна по завершению редактирования полигона

Пост в архиве.
Здравствуйте.

Не получается убрать выделение с полигона, после нажатия на кнопку "завершить" в контекстном меню.
Делаю следующее:
// Отслеживаю событие изменения состояния редактора (клик по "завершить" в контекстном меню полигона)
myMap.geoObjects.events.add("editorstatechange", function(e) {
     //если закончили редактирование -  открываю балун
     if(!e.get('target').editor.state.get("drawing")) {
         // безуспешные попытки снять выделение с полигона
          //e.get('target').editor.stopDrawing(); 
          //e.get('target').editor.stopEditing();
          // открываю балун
          e.get('target').balloon.open();
      }
});

//e.get('target').editor.stopDrawing(); 
//e.get('target').editor.stopEditing(); - это попытки отключить режим редактирования. Эти методы вновь вызывают событие "editorstatechange", в результате выбрасывается исключение too much recursion, тк событие зацикливается.

Вопрос в том как отключить режим редактирования многоугольника по завершению его редактирования, перед или после открытия балуна.


Плюс, каким образом возможно снять выделение с полигона при клике на пустую область карты?

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

Разве после окончании редактирования выделение само не снимается?

Никак нет. Только лишь отключается режим добавления новых вершин в многоугольни. Режим редактирования остается.

надо дополнительно проверять что Вы уже прекратили редактирование, иначе будет рекурсия

 

    myMap.geoObjects.events.add('editorstatechange', function (e) {        var state = e.get('target').editor.state;                if(!state.get('drawing') && state.get('editing')) {            state.set('editing', false);        }    });

 

 

Большое спасибо.

Все оказалось как всегда просто, а то я уже дошел до того, что пошел переопределять контекстное меню.. Сработало, но костыль...

editorMenuManager: function (items, polygon) {
    items.push({
        id: 'StopEditing2',
        title: 'Завершить редактирование',
        onClick: function c() {
             polygon.editor.stopEditing();
        }
    });
    return items;
}