2012-03-16 5 views
4

このコードはそのまま動作しますが、コントロールが追加される前にマップに追加されているレイヤーに依存しているようです。それはいつも事実ですか、私は何か間違っているのですか?複数のクリックコントロール - コントロールを追加するには、レイヤーを地図に追加する必要がありますか?

  var highlightCtrl = new OpenLayers.Control.SelectFeature([a,b], { 
       hover: true, 
       highlightOnly: true, 
       renderIntent: "temporary", 
       eventListeners: {      
        featurehighlighted: make_popup, 
        featureunhighlighted: kill_popup 
       } 
      }); 

      var selectControl = new OpenLayers.Control.SelectFeature([a,b,c,d], { 
       clickout: true, 
       toggle: false, 
       multiple: false, 
       hover: false 
      }); 

      map.addLayer(a); 
      map.addLayer(b); 
      map.addLayer(c); 
      map.addLayer(d); 

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

答えて

1

いいえ、コントロールが追加される前にマップに追加されているレイヤーには依存しません。 this exampleから見ることができます。レイヤーをマップに追加する前に、SelectFeatureコントロールを追加してアクティブにすることができます。

コードの

関連作品:

var selectControl = new OpenLayers.Control.SelectFeature(vectorLayer, { 
    hover: false, 
    highlightOnly: false, 
    toggle: false, 
    renderIntent: "select" 
}); 

map.addControl(selectControl); 

selectControl.activate(); 

map.addLayer(vectorLayer); //<-- layer added at the end 
+1

はい、しかし、あなたは別のvectorLayerを追加するとき、それは壊れる:http://jsfiddle.net/kFdkH/はところで、私はそれは素晴らしいですjsfiddle--聞いたことがありません共有いただきありがとうございます! – Jonathan

+1

真実を伝えるためには、私が上に置いたケースを決して期待したことはありませんでした。私の最初の反応はYESと言うつもりでした...依存しているようです。しかし、上記のケースをテストした後、あなたの質問は常にケースではないことが証明されました。つまり、レイヤーをコントロールに追加する前に、必ずレイヤーをマップに追加します。どのようにしてselectControlがマップ上に存在しないレイヤーを強調表示するのでしょうか?それで、上記のケースが私を驚かせ、私はオリジナルのYES答えをNOに変更しなければならなくなったのです。しかし、あなたは好奇心からちょうど尋ねていますか?私は最初にマップに追加することに固執します。 – capdragon

+0

まあ、私はホバーポップアップとクリックの能力を持っているかなりの層を持っていますが、私は非同期的にそれらをロードしたいので、ユーザーがそのデータを見ていないならば、物事をもう少し速く保つ。しかし、私の問題は、コントロールを追加する前にレイヤーを追加しない限り、レイヤーを追加していないときにクリック/ホバー機能が機能しなかったことです。 – Jonathan

関連する問題