Клуб API Карт

Контекстное меню получение айдишника

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

Подскажите, как получить айдишник объекта из события?

Необходимо сделать полнофункциональное контекстное меню. Т.е. чтоб нормально скрывалось, а не висело как в примере пока не кликнешь еще раз правой кнопкой именно по данному объекту. Необходимо чтоб менюшка закрывалась при клике левой кнопкой мыши, открывался другой конекстник при нажатии на другой объект, а старый закрывался. +необходимо обратиться к объекту из менюшки, т.е. фактически поменять свойство данного объекта из меню. Поскольку в примере http://api.yandex.ru/maps/doc/jsapi/2.x/examples/geoobjectevents.html оно не совсем рабочее. 

 

По сути необходимо сделать следующее:

Поменять свойство объекта, т.е. по умолчанию объекты нельзя перетаскивать. По нажатаю на один из пунктов контекстного меню - объект становится возможным перетаскивать. При этом необходимо чтоб меню по поведению фактически не отличалось от обычного.

Задача фактически осложнена тем, что менюшка не создается в теле документа, как это сделано в примере, а уже болтается непосредственно в верстке в виде скрытого дива. Это необходимо, поскольку api яндекса необходимо как можно сильнее разгрузить, т.к. объектов на карте будет не меньше 10000.

Так вот - идея была заносить в менюшку айдишник объекта и уже с ним оперировать.

4 комментария
Максим Горчаков
28 января 2016, 04:35

вроде бы у каждого события есть цель/target, получить внтури обработчика события e.get('target') . а там и смотрите id ваших объектов

target - объект. Копался в данном объекте - не разобрался где хранится айдишник. :)

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

 

Но вопрос по айдишникам остается открытым, поскольку необходимо сделать событие по пункту меню. Как в примере обработка не катит, поскльку обращение идет к переменной, в которой сидит объект. А делать 10000 переменных не катит... :) пусть и в массив запихать.

Максим Горчаков
28 января 2016, 04:35

Можешь в момоент создания объектов добавить ему свойство myid = [нужный id]. и вот уже когда ты получаешь цель, то забирай свой id

Сделал проще.

в функции - обработчике события в глобальную переменную заношу.

CurrentObject = e.get('target');

Далее событие на кнопке

$('#contentmenu input[type="submit"]').click(function () {

                        var iconText = 'test',

                            hintText = 'test2',

                            balloonText = 'test3';

 

                        CurrentObject.properties.set({

                            iconContent: iconText,

                            hintContent: hintText,

                            balloonContent: balloonText

                        });

 

Но почему-то настройки у объекта не меняются. Точно в target передается объект от которого произошел вызов?

 

P.S.: через консоль проверил - объект присаивается данной переменной.

 

 

 

А... нет... Все ровно. :)