Клуб API Карт

изменение прозрачности у линии

Пост в архиве.

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


Cannot read property 'options' of undefined


как можно изменить прозрачность у созданной линии?

п.с. 

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

for (i....){

polyline[i]=new ymaps.Polyline (

routeways, {hintContent: "test hint",

balloonContent:"test info"},{

 draggable:false,

 strokeWidth: 5,

 strokeOpacity: 0.5,

 strokeColor: color

});

wMap.geoObjects.add(polyline[i]);

 

polyline[i].events.add('balloonopen', function () {

 polyline[i].options.set('strokeOpacity','1');

});

polyline[i].events.add('balloonclose', function () {

 polyline[i].options.set('strokeOpacity','0.5');

});

}
7 комментариев

polyline[i].events.add('balloonopen', function () {
    this.options.set('strokeOpacity','1');
});

polyline[i].events.add('balloonclose', function () {
    this.options.set('strokeOpacity','0.5');
});

Если уж идти по этому направлению, то нужно не забыть указать контекст исполнения функции.

polyline[i].events.add('balloonopen', function () {
    this.options.set('strokeOpacity','1');
}, polyline[i]);

в данном случае this (или event.get('target')) и есть polyline[i]

Я не совсем поняла уточнение. Если вы имели в виду, что работало бы и без указания контекста, то это неверное утверждение. В this стояла бы ссылка на window.

Стандартная фича JS - тот i что вы используете меняется.

(те после окончания цикла равен размеру массива, и уже никуда не указывает)

polyline[i].events.add('balloonopen', function (e) {

 e.get('target').options.set('strokeOpacity','1');

});

polyline[i].events.add('balloonclose', function (e) {

  e.get('target').options.set('strokeOpacity','0.5');

});

спасибо работает