Javascript 是否可以将google.maps.MVCObject的属性绑定到多个目标?

Javascript 是否可以将google.maps.MVCObject的属性绑定到多个目标?,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我正在尝试实现用于处理Multipolygon(源自OpenGIS Multipolygon规范)的类。我的主要目标是扩展MVCObject并在内部管理google.maps.Polygon数组。但当我试图将我的多重多边形的属性(使用.bindTo方法)绑定到循环中的底层多边形时,似乎只有最后一个多边形最终绑定 google.maps.MultiPolygon.prototype = new google.maps.MVCObject(); ... for (var n = 0; n <

我正在尝试实现用于处理Multipolygon(源自OpenGIS Multipolygon规范)的类。我的主要目标是扩展MVCObject并在内部管理google.maps.Polygon数组。但当我试图将我的多重多边形的属性(使用.bindTo方法)绑定到循环中的底层多边形时,似乎只有最后一个多边形最终绑定

google.maps.MultiPolygon.prototype = new google.maps.MVCObject();
...
for (var n = 0; n < this.polygons.length; n++)
{
  for (var i in MultiPolygonOptions) this.bindTo(i, this.polygons[n], i);
}
...
google.maps.MultiPolygon.prototype=new google.maps.MVCObject();
...
对于(var n=0;n

是否可以将MVCObject的属性绑定到google maps v3中的多个目标?如果没有,也许有一些解决办法?谢谢。

正如我所想,在非法挖掘了一些gmaps令人费解的源代码之后,很明显-当使用MVCObject.bindTo绑定某个密钥时,不可能添加多个目标


但我发现了一些解决办法。我已经将我想要绑定的目标(多边形)放入MVCArray,然后使用someObject.bindTo(您的_键,MVCArray_with_targets)将数组绑定到属性。然后我附加了arrays change函数来监听并将更改的属性传递给数组元素。当然,这只适用于一种方式,但在我的情况下就足够了

google.maps.MultiPolygon = function(options)
{
  var self = this;

  ...

  var gpolys = new google.maps.MVCArray();
  // creating polygons from paths
  polysOptions.forEach(function(value, number)
  {
    gpolys.push(self.__createPolygon(value));
  });

  // bind all parent properties to array and set it before (or this turns parent keys undefined)
  for (var i in MultiPolygonOptions) { gpolys.set(i, this.get(i)); this.bindTo(i, gpolys); }
  // pass changes to array members which is google.maps.Polygon instances
  gpolys.changed = function(prop)
  {
    this.forEach(function(poly)
    {
      poly.set(prop, self.get(prop));
    });
  }

  this.set('polys', gpolys);
}

google.maps.MultiPolygon.prototype = new google.maps.MVCObject();
现在,我可以在一个地方控制多重多边形中所有子多边形的外观,就像简单多边形一样

var mpoly = new google.maps.MultiPolygon({ options });
mpoly.setMap(map);
mpoly.setValues({
  fillOpacity: 0.5,
  fillColor: 'yellow'
});