Làm cách nào để thêm một lớp vào SelectFeature mà không mất các lựa chọn hiện có?


9

Tôi đang sử dụng OpenLayers.Control.SelectFeature cho các lựa chọn trên nhiều lớp. Tuy nhiên, khi tôi thêm một lớp bằng setLayer (), các lựa chọn của tôi trên các lớp khác sẽ bị mất.

Bất cứ ai biết làm thế nào để làm việc xung quanh này? Tôi muốn giữ các lựa chọn hiện có của mình trên các lớp khác khi tôi thêm một lớp vào điều khiển SelectFeature.

Đây là một ví dụ: VÍ DỤ CỦA TÔI

Cập nhật:

Tôi biết rằng đây là một phần của API. Nhưng tôi đang tìm kiếm một công việc xung quanh.

/**
 * 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();
    }
},

Câu trả lời:


6

Bạn có thể sửa đổi phương thức setLayer của điều khiển 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();
    }
}

Tất nhiên tôi có thể! Không biết tại sao tôi không nghĩ về điều đó. Cảm ơn! (+1)
CaptDragon

0

Tôi nghĩ rằng đây là một phương thức rất hữu ích nhưng nó nên được thêm vào dưới dạng addLayer (Layer) và với một số thay đổi nhỏ để làm cho nó xử lý một lớp:

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();
  }
},

mà tôi hy vọng sẽ được thực hiện trong yêu cầu kéo này - https://github.com/openlayers/openlayers/pull/1287

Ngoài ra, sau đó người dùng không phải duy trì một danh sách các lớp đã được thêm vào.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.