Клуб API Карт

Изменение стиля placemark'а

Пост в архиве.
a1k0ze1cer
19 октября 2009, 11:25

Здравствуйте. Вот такая простая задача стоит: в ответ на какое-либо действие на странице изменять стиль плейсмарка. Вроде задача сводится к setOptions и update (или можно без него?), но ввиду своей неопытности я уперся в области видимости переменных и ну никак не могу понять, как отправить команду нужной точке :(

Вот такой тестовый код:

<body onload="init();">
<script type="text/javascript">
var map;
function init(){
    map = new YMaps.Map(document.getElementById("YMapsID"));
    map.setCenter(new YMaps.GeoPoint(30.312544,59.921000),11);

    var s1 = new YMaps.Style();
    s1.iconStyle = new YMaps.IconStyle("ic1");
    s1.iconStyle.href = "image1.png";
    YMaps.Styles.add("point1",s1);

    var s2 = new YMaps.Style();
    s2.iconStyle = new YMaps.IconStyle("ic2");
    s2.iconStyle.href = "image2.png";
    YMaps.Styles.add("point2",s2);

    var t = new YMaps.Template();
    t.text = "<div><img src='$[style.iconStyle.href]'></div>";

    YMaps.Templates.add("ic1",t);
    YMaps.Templates.add("ic2",t);

    var pmark = new YMaps.Placemark(new YMaps.GeoPoint(30.312544,59.921000),{style:"point1"});
    map.addOverlay(pmark);
};
function updatemap(){
    pmark.setOptions({style:"point2"});
    pmark.update();
}
</script>
<div id="YMapsID" style="height:200px;width:300px"></div>

<script type="text/javascript">setTimeout("updatemap()",5000);</script>

2 комментария
Можно вынести переменную pmark в глобальную область видимости:
var map, pmark;
function init(){
    map = new YMaps.Map(document.getElementById("YMapsID"));
    map.setCenter(new YMaps.GeoPoint(30.312544,59.921000),11);

    pmark = new YMaps.Placemark(new YMaps.GeoPoint(30.312544,59.921000));
    map.addOverlay(pmark);
};
function updatemap(){
    pmark.setStyle("default#greenPoint");
}
Спасибо за ответ, я так и пытался делать. Правда, я нашел ошибку ещё в другой части кода (которая грузила данные через ajax), так что, видимо, из-за этого и мучался. В итоге вообще убрал создание точек из функции init() и всё вынес в отдельные динамические вызовы.