Клуб API Карт

Ссылка на выполнение скрипта в шаблоне балуна

kamerin.andrei
18 марта 2014, 14:12

Добрый день. Как правильно прописать ссылку в шаблоне балуна при формировании xml-файла, чтобы при клике на нее выполнялся некая функция.

 

Формирование шаблона происходит так:

 

    <Template gml:id="balloonTemplate">

      <text>

        <![CDATA[

 <div style="font-size:12px;">

            <div style="font-family:Tahoma,Arial;font-size:14px;"><b>$[name]</b></div>

            <div style="font-family:Tahoma,Arial;font-size:14px;">($[metaDataProperty.AnyMetaData.district])</div>

            <div style="margin-left:3px;font-family:Tahoma,Arial;font-size:12px;">Удаленность от КАД: $[metaDataProperty.AnyMetaData.kad] км</div>

            <div><img src="http:$[metaDataProperty.AnyMetaData.image]" alt="" /></div>

            <div style="margin-top:5px;">

<a rel="nofollow" class="blue_link" target="blank" href="http://u8814306.plsk.regruhosting.ru/info.php?id=$[metaDataProperty.AnyMetaData.id]">Подробная информация</a>&nbsp;&nbsp;

<a rel="nofollow" href="#" class="blue_link">Сравнение</a></div>

            </div>

 

          </div>

        ]]>

      </text>

    </Template>

 

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

никак

только вариант навешивать обработчик через javascript

Можете показать, как это правильно сделать? Спасибо.

jQuery(document).on('click', '.blue_link', function (e) {

    ...

});

Этот обработчик я вписываю в основного файла index.php. Само создание шаблона у меня находится в отдельном файле json.php. В таком случае должен обработчик срабатывать, а то у меня тишина. Спасибо.

У вас должен быть подключен jQuery

JQuery у меня подключен.

мне нужна ссылка на вашу страницу,

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

http://u8814306.plsk.regruhosting.ru/

 

Обработчик я прокомментировал, как "ЗДЕСЬ". При его вставке у меня разваливается объект accordion из jquery.

У вас какая-то совсем древняя версия jQuery, кажется она еще Ленина видела =)

В ней нет метода "on"

:-D ну да, смотрю, уже 1.11 есть.

Разваливается аккордион тоже из-за этого?

Возможно он разваливается из-за javascript-ошибки при обращении к несуществующему методу

Вы можете попробовать использовать live вместо on, но разработчики jQuery рекомендуют это не делать.

Так что проще обновить jQuery

Что-то после установки новой версии, все сломалось =)

Работает, но аккордеон, видимо, надо будет переделать как-то

Используйте jQuery.UI

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

 

У меня другой вопрос. При создании меток, мне надо в функцию по ссылке в балуне передавать id объекта. Как мне это правильно сделать?

не очень понял вопрос.

У вас же метки через YMapsML загружаются. О каком создании речь?

У меня на карте создаются объекты (объекты недвижимости), данные из которых берутся в БД.

 

Мне надо, чтобы по клику по ссылке в балуне выполнялась функция и в нее передавался id объекта недвижимости.

сохраните id в каком-нибудь data-аттрибуте в dom-ноде в шаблоне балуна

Подробная информация

 

тогда получить его в обработчике можно как-то так:

$(document).on('click', '.blue_link', function (e) {

    e.preventDefault();

    console.log($(e.target).data('id'));

});

Консоль мне сообщает: undefined

я не вижу что у вас есть этот аттрибут

http://u8814306.plsk.regruhosting.ru/info.php?id=40">Подробная информация

У меня обработчик стоит на вторую ссылку "Сравнение":

 

Сравнение

Какая-то проблема с шаблонизатором в YMapsML,

похоже он удаляет этот аттрибут.

Сегодня мы посмотрим повнимательнее.

Ваш YMapsML парсится на серверах Яндекса перед отдачей апи. Поэтому исходный файл обрабатывается на предмет уязвимостей. Видимо название аттрибута data-id попадает в список потенциальных угроз. Попробуйте переименовать аттрибут в dataId или взять его в кавычки, должно заработать.

Можно пример на этой ссылке, если не трудно:

 

Сравнение

 

И как мне тогда получить этот параметр? Спасибо.

напишите вместо "data-id" "dataId"

Изменил на 

Сравнение

 

Но консоль все равно выдает undefined

Есть вероятность, что сервер закешировал ваш файл. Вы можете к своему url приписать какой-то параметр, чтобы сбросить кэш?

У меня каждый раз ссылка на создание xml-файла, где и происходит проблема, новая:

 

http://u8814306.plsk.regruhosting.ru/json.php?id=' + id_area + '&v=' + (+new Date())

Все, мы все узнали. Штука, которая обрабатывает ваш xml на сервере отрезает вообще все кастомные атрибуты у ссылок.

Поэтому придется придумывать обход для задания id элементам. 

В частности вы можете выставлять им несколько css-классов, один из которых будет как раз идентификатором.

Что-то в стиле

Сравнение>

И уже потом для получения id расковыривать классы

onclick="return myfunc($[metaDataProperty.AnyMetaData.id]);" rel="nofollow" class="blue_link" target="blank" href="#" data-id="$[metaDataProperty.AnyMetaData.id]">Подробная информация

---

"ленинским" методом не получается ?