0

私はさまざまなレイヤーを動的に作成しており、すべてをオンザフライで実行しています。特定の各機能が選択されたときにいくつかのことを行う必要があります。依存関係があり、かなり長いので、実際のソース コードをここに貼り付けることはできませんが、次のようなものを想像できます。

if (e.Bubbles) {
     jQuery.each(e.Bubbles, function (i, obj) {
         jQuery.each(obj, function (n, el) {

             /* features and layers ... */
             var point = new OpenLayers.Geometry.Point(el[1],el[0]);

             /* some code here ... */
         });

         layer = new OpenLayers.Layer.Vector(i, {styleMap: e.Style});
         map.addLayer(layer);
         e.Layers.push(layer);

         /* etc. */

イベントをレイヤーにバインドしようとすると、onSelect機能しますが、前のレイヤーの動作が置き換えられるためloop、フィーチャをクリックすると、最後のレイヤーのみが正常に機能します。これが私のコードです(ループ内):

selectControl = new OpenLayers.Control.SelectFeature(
    Layer,
    {
        clickout: false, 
        toggle: false,
        multiple: false, 
        hover: false,
     }
 );

selectControl.activate();

layer.events.on({
    "featureselected": function(event) {
        console.log(event.feature);
    }
});

そのため、selectControlはループ内で毎回置き換えられ、以前のものに対する独自の機能が失われ、最新のレイヤーに対してのみ機能します。

すべてのレイヤーを配列として渡そうとしましたが(これは機能するはずです)、成功しませんでした。

selectControl = new OpenLayers.Control.SelectFeature(
    e.Layers,
    {
        clickout: false, 
        toggle: false,
        multiple: false, 
        hover: false,
        onSelect: function(event) {
            console.log(event.feature);
        },
    }
);

selectControl.activate();
4

1 に答える 1

1

だから、ここに答えがあります!

if (typeof selectControl == "object") {
    selectControl.setLayer(map.getLayersByClass("OpenLayers.Layer.Vector"));

} else {

    selectControl = new OpenLayers.Control.SelectFeature(
        layer,
        {
            clickout: false, 
            toggle: false,
            multiple: false, 
            hover: false,
        }
    );

    map.addControl(selectControl);
    selectControl.activate();               
}

layer.events.on({
    "featureselected": function(event) {
        console.log(event.feature);
    }
});
于 2013-04-16T12:38:19.330 に答える