Клуб API Карт

События в menuManager API 2.0

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

Как подключить обработчик события в API 2.0 ? Ниже мой кусок кода, в котором я добавляю новый пункт меню и не знаю как обработать событие. Пытался сделать как в API 1.x, но ничего не вышло.

// добавим пункт контекстного меню вершины полигона
polygon.editor.options.set({
menuManager: function(editorItems, model) {
editorItems.push({
id: "StopEditing",
title: '<span style="white-space:nowrap;">Завершить редактирование<span>'
});
           return editorItems;
}
})
14 комментариев
Рядом с id и title можно добавить onClick и передать туда функцию, которая будет вызвана по клику. Вы та к пробовали?

а где можно прочитать про все возможные значения полей возращаемого меню-манеджером объекта?

так и пробовал, вот код

 

polygon.editor.options.set({menuManager: function(editorItems, model) {editorItems.push({id: "StopEditing",title: 'Завершить редактирование',onClick: function (polygon, pointIndex) {                   polygon.editor.stopEditing();}});           return editorItems;}})

при таком коде вот такая ошибка: "Объект не поддерживает свойство или метод "clickCallback""

Тут 2 проблемы.
1. То, что вы оборачиваете title в ноду, хотя nowrap итак есть.
2. В обработчик onClick ничего не передается. Берите нужные параметры через замыкание.

1ю проблему исправим, пока уберите span.

Спасибо.

Если не сложно сделайте пример, а то я не силен в JS.

 
Если не сложно сделайте пример, а то я не силен в JS.
Полигон берите через замыкание, а не из параметров функции и все:onClick: function () {    polygon.editor.stopEditing();}

Спасибо, все получилось.

Александ Арбузов
28 января 2016, 04:06

Посмотрите пожалуйста. Куда закралась ошибка? 

 

myPolygon.editor.options.set({                        menuManager: function (menuItems, model) {                            menuItems.push({                                id: "StopEditing",                                title: 'Завершить редактирование',                                onClick: function () {                                    myPolygon.editor.stopEditing();                                     myPolygon.balloon.open();                                }                            });                            return menuItems;                        }                    });

Ошибка: Uncaught TypeError: Object # has no method 'clickCallback'

Увы, задавать html в title пока нельзя.

white-space:nowrap - ставится для текста пункта меню по умолчанию.
Александ Арбузов
28 января 2016, 04:06

Так у меня всё работает. пункт меню выводится, только лишь при нажатии на этот пункт меню выводится ошибка, которая описана выше. 

Уберите

Александ Арбузов
28 января 2016, 04:06

О боги. Спасибо. Всё работает. 

Александ Арбузов
28 января 2016, 04:06

и по этой теме у меня остался один вопрос: 

до этого я писал обработчик кнопок по умолчанию: 

 

 

myPolygon.editor.state.events.add('change', function (e) {

                               if(e.get('target').get('editing')){

                                    myPolygon.balloon.open();

                                    myPolygon.editor.stopEditing();

                               }

                        });

 

код срабатвает по нажатию на любой из пунктов menuManager, а как мне обработать кнопку "ЗАВЕРШИТЬ", которая, повторюсь, находится в этом меню по умолчанию.

Спасибо.