我正在尝试实现处理Multipolygon的类(从OpenGIS Multipolygon规范派生)。我的主要目标是扩展MVCObject并在内部管理google.maps.Polygon数组。但是当我试图将我的Multipolygon的属性(使用.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);
}
...
是否可以将MVCObject的属性绑定到google maps v3中的多个目标?如果不是,也许有一些解决方法?感谢。
答案 0 :(得分:1)
正如我所考虑的那样,经过一些非法挖掘gmaps的困惑源代码后,很明显 - 使用MVCObject.bindTo 绑定某些密钥时,无法添加多个目标。
但我发现了一些解决方法。我已经将目标(多边形)放入MVCArray中,然后使用someObject.bindTo(your_key,MVCArray_with_targets)将数组绑定到属性。然后我附加了数组更改函数来监听并将更改的属性传递给数组元素。当然,这只能用一种方式,但在我的情况下就足够了。
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();
现在,我可以在一个地方控制MultiPolygon中所有子多边形的外观,就像使用简单的Polygon一样。
var mpoly = new google.maps.MultiPolygon({ options });
mpoly.setMap(map);
mpoly.setValues({
fillOpacity: 0.5,
fillColor: 'yellow'
});