Можно ли привязать свойство google.maps.MVCObject к более чем одной цели? - PullRequest
0 голосов
/ 04 октября 2011

Я пытаюсь реализовать класс для обработки 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? Если нет, может быть, есть какие-то обходные пути? Спасибо.

1 Ответ

1 голос
/ 05 октября 2011

Как я считал, после некоторого нелегального копания загадочного исходного кода 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'
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...