2017-06-22 43 views
0

在Bing Maps v7中,我能夠將圖釘添加到entityCollection,然後在代碼中稍後循環該集合以設置選項或其他內容。現在,我無法從v8層獲取引腳。在Bing Maps v8中,我可以從循環中的圖層獲取圖釘對象嗎?

這裏是我以前在V7做後,我已經添加了引腳到entityCollection:

for (var i = 0; i < entityCollection.getLength() ; i++) { 
    var pin = entityCollection.get(i); 
    pin.setOptions({ visible: true }); 
} 

我已經改變了對象entityCollection爲V8的一層,我也通過該層循環而i < entityCollection.data.length

現在,Bing地圖V8,我無法從我已經添加它到層得到腳物件。上面的代碼拋出的setOptions線錯誤,我也曾嘗試得到引腳:

entityCollection.data[i] 

,而不是

entityCollection.get(i) 

但是,這並不工作。恐怕我的問題太籠統了,因爲我找不到任何能夠真正回答我的問題的東西。我有一個解決方法,但是當我想要隱藏所有具有特定屬性的引腳時,會導致失敗。提前致謝!

回答

1

是的,在V8圖層中有一個getPrimitives函數,它返回一個包含所有形狀的數組。然後,您可以像處理任何其他數組一樣遍歷這些形狀。

+0

我在這裏遇到麻煩了。我可以看到我的數據中有16個項目,但是當我在圖層上使用「getPrimitives」函數時,它告訴我它是0長度的數組。 – PopeDarren

+1

剛剛在主發佈分支上運行了一些測試,這工作正常。你可以提供你的v8代碼來創建圖層,向它添加數據,然後嘗試循環它。 – rbrundritt

+0

我真的很感謝你的幫助,但我剛剛得到了解決方法。我已經花了太多的時間在這個FAR上,所以我會去用它。謝謝! – PopeDarren

2

必應地圖v8已經取消了entityCollection--儘管他們表示仍然支持,但您顯然不希望再使用已棄用的東西。

任何地方你有一個entityCollection,用LayerMicrosoft.Maps.Layer)代替它。 Layer s揭露了getPrimitives()方法,它將爲您提供一組內容。

var map = new Microsoft.Maps.Map(..., ...); 

var layer = new Microsoft.Maps.Layer(); 
// Add layer data... 
layer.add(new Microsoft.Maps.Pushpin(...)); 

// Add layer to map 
map.layers.insert(layer); 

// Then you can iterate 
var layerItems = layer.getPrimitives(); 
var len = layerItems.length; 

for(var i = 0; i < len; i++){ 
    var pin = layerItems[i]; 
    // Do something with your pin 
    pin.setOptions({visible: false}); 
} 

請注意,如果你正在做大規模更新到該層的全部內容,如顯示或隱藏各引腳的層,你可以直接在該層上。這將爲您(瀏覽器)節省大量工作,分別設置每個引腳。

layer.setVisible(true); 
+0

雖然此代碼片段可能會解決問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 –

+1

@PatrickHund你是對的,一個懶惰的答案。現在我會擴大我的時間。 – Krenom

相關問題