Пиша JS приложение, където рисувам много полилинии, използвайки масив от точки, но във всяка точка имам някои допълнителни свойства в тази точка (GPS данни, скорост и т.н.).
Искам да покажа тези допълнителни подпори onmouseover или onmouseclick събитие.
Имам два начина:
използвайте стандартните полилинии и манипулатор на събития. Но в този случай не мога да определя допълнителни свойства за начална точка на тази полилиния, защото не мога да запазя тези подпори в свойствата на полилинията. Има едно решение - запишете в масива допълнителни свойства и опитайте да ги намерите по LatLng на първата точка на полилинията, но предполагам, че е твърде бавно..
разширяване на полилиния и запазване на допълнителни свойства в нов обект, но не мога да разширявам събития на мишката :(
За да удължа полилинията, използвам този код:
function myPolyline(prop, opts){
this.prop = prop;
this.Polyline = new google.maps.Polyline(opts);
}
myPolyline.prototype.setMap = function(map) {
return this.Polyline.setMap(map);
}
myPolyline.prototype.getPath = function() {
return this.Polyline.getPath();
}
myPolyline.prototype.addListener= function(prop) {
return this.Polyline.addListener();
}
myPolyline.prototype.getProp= function() {
return this.prop;
}
myPolyline.prototype.setProp= function(prop) {
return this.prop = prop;
}
и създайте нов обект във for цикъл (i - индекс на текущата точка в масив от точки) по този начин:
var polyline_opts = {
path: line_points,
strokeColor: color,
geodesic: true,
strokeOpacity: 0.5,
strokeWeight: 4,
icons: [
{
icon: lineSymbol,
offset: '25px',
repeat: '50px'
}
],
map: map
};
var add_prop = {
id: i,
device_id: device_id
};
...
devices_properties[device_id].tracks[(i-1)] = new myPolyline(add_prop, polyline_opts);
Където:
- line_points - масив от точки (само две точки),
- i - индекс на текущата точка
- devices_properties[device_id].tracks - масив от разширени полилинии (с добавяне на свойства) по моя индекс device_id
След това зададох манипулатор на събития така:
var tmp = devices_properties[device_id].tracks[(i-1)];
google.maps.event.addListener(tmp.Polyline, 'click', function(e) {
...
console.log(tmp.prop.id);
...
}
Но в този случай винаги получавам същия идентификатор в конзолата..
Когато използвам
google.maps.event.addListener(devices_properties[device_id].tracks[(i-1)].Polyline, 'click', function(e) {
...
console.log(???); // How to get parent of polyline fired the event?
...
}
Не знам как да накарам родител на полилиния да задейства събитието?