Клуб API Карт

GreyBox на ссылку в балуне

bash81
9 июня 2010, 13:07

Народ кто-нибудь смог сделать такую штуку, в баллуне ссылка, которая открывается в компоненте(типа Lightbox)?

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

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

Парсер YMapsML удаляет весь javascript, поэтому советую пойти следующим путем:


  • в metaDataProperty у объектов указать необходимые параметры для формирования ссылки
  • создать обработчик события Load - успешной загрузки YMapsML
  • в обработчике пройтись по всем объектам и создать ссылки

Как сделать метку ссылкой можно почитать в одном из обсуждений клуба: http://clubs.ya.ru/mapsapi/posts.xml?tag=10615927

Саша попробовал вот так,
    function setprop(num) {   
        YMaps.Events.observe(ml, ml.Events.Load, function (ml, error) {
          var obj = this.filter(function (obj) {
              return obj.id == num
          });
          YMaps.Events.observe(obj[0], obj[0].Events.Click, function () {
          document.location = "http://clubs.ya.ru/mapsapi/";
      });

          obj[0].openBalloon();
        }); 
    };     

Баллун превращается в ссылку, но мне то надо подправить ссылку которая есть в баллуне уже???.
а как к ней добраться? или хрен с ней, создать новую ссылу в баллуне?

Вы задали в description html в котором присутствует ссылка?


Если несложно дайте ссылку на свой YMapsML, а также скажите какие ссылки нужно подправлять и что нужно делать при щелчке по ссылкам.

http://www.gati-online.ru/newjoom.htm   тут я пытаюсь отладиться, в этом баллуне ссылка "Подробная информация" вот она должна быть с параметрами (как в ссылке "Сцыла") а они сьедаются, ссылка в шаблоне прописана, она уникальна для кажлого баллуна (параметры).

http://www.gati-online.ru/test.xml           

Предлагаю вам оставить в YMapsML только данные, а в JavaScript сделать макет. Почитать можно подробнее в блоге или в Руководстве разработчика.


Примерно макет будет выглядеть так:



function ExampleLayout (context, map, owner) {
    this.$nodes = YMaps.jQuery(
        '\
             с ' + context.name + '\
             ' + context.metaDataProperty.AnyMetaData.srk + '\
             организация:' + context.metaDataProperty.AnyMetaData.org + '\
             документ:' + context.metaDataProperty.AnyMetaData.tel + '\
             адрес:' + context.metaDataProperty.AnyMetaData.adr + '\
             ' + context.metaDataProperty.AnyMetaData.adr2 + '\
             ' + context.metaDataProperty.AnyMetaData.usl + '\
             подробная информация\
          ');

    this.onAddToParent = function (parentNode) {
        this.$nodes.appendTo(parentNode);
    };

    this.onRemoveFromParent = function () {
        this.$nodes.remove();
        this.$nodes = null;
    };

    this.update = function () {}
}

В обаботчике успешной загрузки YMapsML присваем содержимому балуна новый макет. С помощью метода getComputedStyle() я взял существующий стиль объектв, потом переопределил стиль для содержимого балуна и модифицированный стиль присвоил объекту.



var ml = new YMaps.YMapsML("http://www.gati-online.ru/test.xml");
YMaps.Events.observe(ml, ml.Events.Load, function () {
    ml.get(0).forEach(function (obj) {
        var style = obj.getComputedStyle();
        style.balloonContentStyle = {
            template : new YMaps.LayoutTemplate(ExampleLayout)
        }
        obj.setStyle(style);
    });
});
map.addOverlay(ml);

Если что будет непонятно - спрашивайте.
Спасибо огромное, буду разбираться.
Сделал как написано, но параметр походу опять куда-то делся, несрабатывает??
http://www.gati-online.ru/newjoom.htm

Попробуйте так:



this.$nodes = YMaps.jQuery(
    '\
         с ' + context.name + '\
         ' + context.metaDataProperty.AnyMetaData.srk + '\
         организация:' + context.metaDataProperty.AnyMetaData.org + '\
         документ:' + context.metaDataProperty.AnyMetaData.tel + '\
         адрес:' + context.metaDataProperty.AnyMetaData.adr + '\
         ' + context.metaDataProperty.AnyMetaData.adr2 + '\
         ' + context.metaDataProperty.AnyMetaData.usl + '\
         + context.description + '" title="подробная информация">подро мация\
      ');

this.$nodes.find("a").bind("click", function () {
    return GB_showCenter('Подробная информация', this.href);
});

Подробнее о доступных функция GreyBox: http://orangoo.com/labs/greybox/advance_usage.html

Саша Гений! Однозначно снимаю шляпу. Спасибо огромное.
Один вопросик остался)))), еще до GB наблюдался, если на том примере тыкнуть по два раза на балун, то он после этого пропадает, или не действует больше, с чем это может быть связано???

Моя ошибка. Удалите строчку:


this.$nodes = null;
Это не ваша ошибка, это я тупень.
Я Вас не сильно достал? ))
Наблюдается такая хрень.
Открыть балун, ниче не нажимать, закрыть балун, опять открыть и нажать ссылку,   не срабатывает.
Ну и плюс варианы, открыть один потом второй.....

Я посмотрел. Вроде все работает. Или у вас ошибка наблюдается и сейчас?

да она есть, в Опере и ИЕ ,
открыть закрыть опять открыть и уже после этого по ссылке,
один и тот-же балун
???

Проверил в IE6, Opera 10.53, Opera 9.27, FF 3.6.3. Везде работает.


Может закэшировался старый код?

Чудеса, я тож толь-ко что проверил в этих же трех браузерах, и везде ошибку нашёл))))
мож там на закрытие балуна какй обработчик повесить?????
Непруха)))))
Все равно спасибо за все!!!! Очень помог!!!