Jak dodać warstwę do SelectFeature bez utraty istniejących zaznaczeń?


9

Korzystam z OpenLayers.Control.SelectFeature do selekcji na wielu warstwach. Jednak gdy dodam warstwę za pomocą setLayer (), mój wybór na pozostałych warstwach zostanie utracony.

Czy ktoś wie jak to obejść? Chciałbym zachować istniejące zaznaczenia na innych warstwach, gdy dodam warstwę do kontrolki SelectFeature.

Oto przykład: MÓJ PRZYKŁAD

Aktualizacja:

Wiem, że jest to część interfejsu API. Ale szukam obejścia.

/**
 * APIMethod: setLayer
 * Attach a new layer to the control, overriding any existing layers.
 *
 * Parameters:
 * layers - Array of {<OpenLayers.Layer.Vector>} or a single
 *     {<OpenLayers.Layer.Vector>}
 */
setLayer: function(layers) {
    var isActive = this.active;
    this.unselectAll();
    this.deactivate();
    if(this.layers) {
        this.layer.destroy();
        this.layers = null;
    }
    this.initLayer(layers);
    this.handlers.feature.layer = this.layer;
    if (isActive) {
        this.activate();
    }
},

Odpowiedzi:


6

Możesz zmodyfikować metodę setLayer kontrolki SelectFeature:

OpenLayers.Control.SelectFeature.prototype.setLayer = function(layers) {
    var isActive = this.active;
    //this.unselectAll(); <- what you need
    this.deactivate();
    if(this.layers) {
        this.layer.destroy();
        this.layers = null;
    }
    this.initLayer(layers);
    this.handlers.feature.layer = this.layer;
    if (isActive) {
        this.activate();
    }
}

Oczywiście, że mogę! Nie wiem, dlaczego o tym nie pomyślałem. Dzięki! (+1)
CaptDragon

0

Myślę, że jest to bardzo przydatna metoda, ale należy ją dodać jako addLayer (Layer) i z niewielkimi zmianami, aby obsługiwała jedną warstwę:

addLayer = function(layer) {
  var isActive = this.active;
  var currLayers = this.layers; 
  this.deactivate();
  if(this.layers) {
      this.layer.destroy();
      this.layers = null;
  }
  if ( currLayers != null) {
      currLayers.push(layer);   
      this.initLayer(currLayers);
  } else {
      this.initLayer([layer]);
  }
  this.handlers.feature.layer = this.layer;
  if (isActive) {
      this.activate();
  }
},

co mam nadzieję zostanie uwzględnione w tym żądaniu ściągnięcia - https://github.com/openlayers/openlayers/pull/1287

Również wtedy użytkownik nie musi utrzymywać listy warstw, które zostały dodane.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.