我正在将一个项目从OL2更新到OL3,但我卡在了如何在更改要素样式后重新绘制要素上。
在OL2中,这样做是有效的:
hidePoints: function(id) {
if (! this.getMap().center) {
return;
}
var i,
feature,
len = this.points.features.length;
if (id !== null) {
for( i = 0; i < len; i++ ) {
feature = this.points.features[i];
if (feature.attributes.aces_id == id) {
feature.style = null;
} else {
feature.style = { display: 'none' };
}
}
} else {
for( i = 0; i < len; i++ ) {
feature = this.points.features[i];
feature.style = { display: 'none' };
}
}
this.points.redraw();
},
在OL3中,我尝试更新函数以隐藏点图层,但是
redraw()
不再存在,由于我正在使用的图层是一个ol.layer.Vector
,我无法像其他除向量以外的源一样找到任何updateParams
选项。Dispatch Event和changed也没有起作用。我希望changed会起作用,但什么也没发生。hidePoints: function(id) {
if (! this.getMap().getView().getCenter()) {
return;
}
var i,
feature,
layerSourceFeatures = this.pointsLayer.getSource().getFeatures(),
len = layerSourceFeatures.length;
if (id !== null) {
for( i = 0; i < len; i++ ) {
feature = this.pointsLayer.getSource().getFeatures()[i];
if (feature.get('aces_id') == id) {
feature.style = null;
} else {
feature.style = { display: 'none' };
}
}
} else {
for( i = 0; i < len; i++ ) {
feature = this.pointsLayer.getSource().getFeatures()[i];
feature.style = { display: 'none' };
}
}
//this.pointsLayer.redraw();
//this.pointsLayer.dispatchEvent(goog.events.EventType.CHANGE);
this.pointsLayer.changed();
},
我还在想改变样式是否是这样做的(将每个特征提取到另一个变量中),或者是否只会更改该特征并保留原始内容。此外,总是获取
getSource().getFeatures()
似乎对性能有点滥用...但我似乎找不到其他方法。无论如何,现在OL3中如何执行重绘以渲染已更改样式的要素?可以将图层设置为可见,但我不想一直隐藏/显示所有要素。有时我只想根据它们的给定ID隐藏/显示其中的一些要素。