Клуб API Карт

иконка в RadioButton и пользовательские метки

witzawitz
22 марта 2009, 03:45

1. Я создаю новый радиобатон.

       var btn = new YMaps.ToolBarRadioButton('default', { icon: "stuff/pics/point.ico", width: 20});

В мозилле, опере, хроме и ие7+ отображается нормально. В ие6 иконка не отображается. Кроме того, если убрать в свойствах ширину, то в ие6 кнопка расползается во всю ширину карты.

Кстати, в документации не написано, что дефолтная группа для радиобатонов называется default (что в каком-то смыле очевидно), поэтому пришлось искать в скриптах самих яндекс-карт.


2. Создаю пользовательскую метку.

var s = new YMaps.Style();
    s.iconStyle = new YMaps.IconStyle();
    s.iconStyle.offset = new YMaps.Point(-8, -48);
    s.iconStyle.href = "stuff/pics/button.ico";
    s.iconStyle.size = new YMaps.Point(25, 50);
    YMaps.Styles.add("example#button", s);

var points_options =
    {
        draggable: 1,
        hasBalloon: false,
        hasHint: false,
        style: "example#button"
    };

YMaps.Events.observe(map,map.Events.Click, function (mEvent)
{
      var m = new YMaps.Placemark(mEvent.getGeoPoint(), points_options);
      m.SetBounds(YMaps.GeoBounds.fromCenterAndSpan(mEvent.getGeoPoint(), new YMaps.Size(100, 100)));
      map.addOverlay(m);

}

Создаю несколько таких меток. Хочу привязать к каждой метке определённый текст через SetIconContent и, как написано в документации, устанавливаю нужные границы (которых заведомо хватит для текста). Но текст всё равно не отображается. Кроме того, перестаёт работать обработчик события.


Спасибо

10 комментариев
Подписаться на комментарии к посту
1) var toolbar = new YMaps.ToolBar(); toolbar.add(new YMaps.ToolBarRadioButton('default', {width: 20})); map.addControl(toolbar); Работает в IE6. Ничего не расползается. Дай ссылку на страницу. 2) Ссылку?
1. Вы не указали линк на файл с иконкой. В таком исполнении конечно же всё будет работать, поскольку указана ширина. 2. Если бы я могла дать ссылку, я бы сделала это сразу. Проект на стадии разработки, поэтому закрыт.
1) проверил у себя, да есть такая проблема!!! Возможное решение проблемы - используйте вместо ico gif картинки, с ними проблем не заметил))) 2) не проверял, но может опять проблема из-за иконки))) п.с. откуда узнали как называется дефолтовуа группа? Мне надо узнать по каким указателям обращаться к "Перемещение", "Лупа" и "Линейка".
1. Смена иконки на gif решила проблему. Спасибо! 2. Тут, к сожалению, тот же трюк не сработал. Как я искала дефолтную группу: 1. Bдём по ссылке на скрипт, который при получении ключа нам выдал яндекс http://api-maps.yandex.ru/1.0/?key=. 2. Смотрим на определение YMaps.__MapData. Нас интересует значение versionPath, текущая версия "http://api-maps.yandex.ru/1.0.3/". 3. Чуть ниже в определении функции находим переменную scriptsToLoad, которая может принимать два значения: var scriptsToLoad = [ YMaps.__MapData.versionPath + 'xml/data.xml?v=' + '1.25.0', YMaps.__MapData.versionPath + 'YMaps.js' ]. 4. Из пункта 3 и 4 имеем два пути на скрипты: http://api-maps.yandex.ru/1.0.3/xml/data.xml?v=1.25.0 и http://api-maps.yandex.ru/1.0.3/YMaps.js. 5. В каждом из этих скриптов ищем строчку ToolBarRadioButton. Путём сложных математических вычислений обнаруживаем, что она встречается только во втором скрипте (где, по-видимому, и происходит инициализация самих яндекс-карт). На втором попадании в эту строчку видим, что радиобатон определяется с группой 'default'. В этом же скрипте есть упоминание ruler, magnifier и move. Есть что-то вроде __actionControls.Ruler.control. Может, это то, что Вам надо.
png/gif 8ми битный попробуйте использовать вместо ico
В первом случае помогло, во втором - нет. Кроме того, если просто задать границы для метки m.SetBounds(YMaps.GeoBounds.fromCenterAndSpan(mEvent.getGeoPoint(), new YMaps.Size(1, 1))), то обработчик тоже перестаёт работать.
И ещё уточнение. Я создаю связанные метки, то есть обработчик выглядит так: var route = YMaps.Events.observe(map,map.Events.Click, function (mEvent) { var m = new YMaps.Placemark(mEvent.getGeoPoint(), route_points_options); // m.SetBounds(YMaps.GeoBounds.fromCenterAndSpan(mEvent.getGeoPoint(), new YMaps.Size(1, 1))); // m.SetIconContent("test"); track.add([m]); map.addOverlay(track); }, map); Где track объявлен как ConnectedPlacemarks. Если расскомментировать хотя бы одну из строек m.SetBounds или m.SetIconContent, то обработчик перестаёт работать.
Методы начинаются со строчной буквы: setBounds() setIconContent()
Чёрт :-) Тем не менее это проблему не решило. Обработчик, естественно, заработал. А текст к метке всё равно не прописывается.
дай ссылку на страницу - посмотрю