2017-06-22 20 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