2015-10-05 39 views
0

所以即时通讯,谷歌地图中的多边形的一些魔术。 的事情是,即时通讯观看每个多边形路径上的事件(以检测'set_at'和'insert_at'事件在多边形节点上的变化) ,我循环在多边形阵列上并创建此事件(其中包括).getPath()谷歌地图事件引用父母多边形

coffeescript

google.maps.event.addListener(polygon.getPath(), 'insert_at', (index) -> 

每个多边形都有一个id。但从这个范围我不能访问父元素,并且我需要保存从已更改的多边形的更改...有没有任何方法来从此事件侦听器的父多边形的ID?

+0

对于JavaScript,你可以当你创建一个新的多边形对象创建'indexID' ,在你的事件监听器中,你可以得到每个多边形的'indexID',Javascript回答:http://stackoverflow.com/a/15209277/4195406 – ztan

+0

我通过将所有节点事件包装在多边形事件中解决了这个问题。 我已经在每个多边形上有一个索引属性,但不能访问节点事件上的多边形属性。方法是将polygon.getPath()包含在绑定到循环中当前多边形的onClick事件上。如您所见,绑定到.getPath()方法的事件会导致事件的范围doesent具有多边形及其属性。 –

回答

0

我假设polygonsArray是你的多边形的阵列,所以你的循环应该是这样的......

for (var u=0; u < polygonsArray.length; u++) { 
     var polygonOptions = { 
      fillColor: 'blue', 
      strokeWeight: 1, 
      name: "Any Name" 
     }; 

     // 1\ Creat polygon 
     var polygon = new google.maps.Polygon(polygonOptions); 
     // 2\ Set polygon path 
     var pathArr = polygonsArray['path']; 
     polygon.setPaths(pathArr); 

     //xxxxxxxxxxxxxxxxxxxxx MAGIC HERE xxxxxxxxxxxxxxxxxxxxxxxxxx 
     // 2.5\ Give polygon index as a path object new attribute 
     var path = polygon.getPath(); 
     path["parentIndex"] = u; 
     //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 

     // 3\ Add polygon to map 
     polygon.setMap(map); 

     // 4\ Add events to polygon 
     //Listen to any modification occures to the path 
     google.maps.event.addListener(polygon.getPath(), 'set_at', function() { 
       console.log(this["parentIndex"]); 
     }); 

     //Listen to new point inserted to the path 
     google.maps.event.addListener(polygon.getPath(), 'insert_at', function() { 
      console.log(this["parentIndex"]); 
     });    



    }//End of loop