Клуб API Карт

Как в geoQuery JSON-ом передать "ymaps.overlay.html.Placemark" и "ymaps.templateLayoutFactory.createClass"

i@pa6ok.ru
19 апреля 2015, 02:52

Я формирую JSON массив на стороне PHP скрипта и посредством $.getJSON получаю его, после чего передаю Яндекс.Карте: new ymaps.geoQuery(json).

 

Дело в том, что JSON берёт опции "ymaps.overlay.html.Placemark" и "ymaps.templateLayoutFactory.createClass" в кавычки, и видимо Яндекс.Мапс думает, что это просто строка. Как можно в моём случае в опции "pointOverlay" и "iconLayout" передать нужные мне данные? И если это невозможно, есть какое-то другое решение, чтобы мне не переписывать всю логику приложения?

 

БлагоДарю заранее.

10 комментариев
Подписаться на комментарии к посту

Какие именно опции Яндекс.Мапс берет в кавычки? Дайте ссылку на JSON

Я не говорил, что опции в кавычки берёт Яндекс.Мапс.. я написал, что JSON оборачивает опции "pointOverlay" и "iconLayout" в кавычки при передаче в них "ymaps.overlay.html.Placemark" и "ymaps.templateLayoutFactory.createClass", в связи с чем видимо Яндекс.Мапс думает, что это просто строка.


Вот ссылка - view-source:http://obman.kz/index.php?id=4&ym=1


Я понимаю, что передаю эти объекты (или чем там являются "templateLayoutFactory" и "overlay.html.Placemark"..) в ЯМапс неправильно, подскажите пожалуйста, как можно (и возможно ли) как-то корректно передать в geoQuery JSON массив с этими опциями, дабы получить нужный мне результат? А результат мне нужен примерно такой, как на главной Яндекс Карт, а точнее настраиваемое html отображение маркеров на карте.

 

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

Я не понимаю как вы хотите в сериализованных на сервере данных (JSON) передавать ссылки на какие-то методы и функции конструкторы которые будут доступны на клиенте.

 

В данных надо передавать данные, а представление геообъектов можно настроить на клиенте в зависимости от данных геообъекта

 

То есть после передачи данных выполнить чтото вроде?

 

geoObjects.then(function () {

window.placemarks = geoObjects.search("geometry.type == 'Point'");

});

 

А после как быть? Как прописать для всех полученных объектов вот это:

 

pointOverlay: ymaps.overlay.html.Placemark,

preset: 'twirl#stretchyIcon',

iconLayout: ymaps.templateLayoutFactory.createClass('[if properties.iconContent]>$[properties.iconContent][else]$[properties.hintContent][endif]</div>')

 

При условии, что объектов около 1к.

Вместо указания их каждой метке, эти опции можно назначить родителю меток, например, коллекции myMap.geoObjects

 

myMap.geoObjects.options.set({

preset: 'twirl#stretchyIcon',

...

});

Спасибо, Дмитрий (надеюсь не ошибся в имени :)).

 

Ещё подскажите пожалуйста, ежели не затруднит, подслушать событие по родителю оверлеев возможно? Если можно, не поможете с кодом?)

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

 

myMap.geoObjects.events.add('click', function (e) {

var target = e.get('target'); // Текущий объект, источник события

});

БлагоДарю, с коллекцией понятно. А как повесить на лайаут? Точнее на те объекты, которым я присваиваю опцию "iconLayout: ymaps.templateLayoutFactory.createClass".

 

Опоробовал Ваш код, на объектах стандартных (те, которые не подверглись изменению опции "iconLayout: ymaps.templateLayoutFactory.createClass") срабатывает, а на тех, которым я присвоил "iconLayout: ymaps.templateLayoutFactory.createClass" не работает, к сожалению. Как для этих объектов (лайаутов) ловить события, подскажите пожалуйста?

Пытался, как вот здесь - https://tech.yandex.ru/maps/doc/jsapi/2.0/ref/reference/templateLayoutFactory-docpage/

 

Но мои клики не видны под z-index:3000 общей карты. Если вручную через браузерный "Elements" меняю z-index у блока "ymaps-2-1-23-point-overlay", то события срабатывают.

 

Честно говоря я в недоумении, как на главной Яндекс.Карт под z-index:3000 общей карты обрабатываются события на метках созданных лейаутом? )

Только islands#