Tôi có một bản đồ OpenLayers 3.2.0 có một số nguồn vectơ ( ol.source.Vector
) và các lớp vectơ liên quan ( ol.layer.Vector
)
Khi các Tính năng ( ol.Feature
) được thêm vào các nguồn vectơ, chúng được cung cấp một thuộc data
tính được đặt thành đối tượng javascript mà tính năng này thể hiện. TypeScript theo sau ...
vectorSource.addFeature(new ol.Feature({
geometry: /* ... */,
data: vectorData,
}));
Các lớp vectơ sau đó có một hàm kiểu để đọc thuộc data
tính và lấy kiểu của nó:
vectorLayer = new ol.layer.Vector({
source: vectorSource,
renderBuffer: /* ... */,
style: function (feature: ol.Feature, resolution: any) {
var data = </* TypeScript Type */>feature.get('data');
if ((data) && (data.style)) {
return [data.style];
}
else {
/* return default style */
}
}
});
Đôi khi, các sự kiện không liên quan đến bản đồ khiến phong cách thay đổi. Ví dụ, khi một đối tượng trở nên không hợp lệ, kiểu của nó sẽ thay đổi. Rõ ràng, vì data.style
hoàn toàn nằm trong tầm kiểm soát của tôi, việc thay đổi nó là chuyện nhỏ.
Vấn đề là bản đồ không biết rằng phong cách đã thay đổi. Nếu tôi thay đổi kiểu của một đối tượng và sau đó phóng to bản đồ, buộc nó phải vẽ lại, tôi nhận thấy rằng các hàm kiểu của tôi chạy và trả về kiểu mới và tính năng được vẽ lại. Làm thế nào để tôi lập trình buộc bản đồ phải làm mới?
Sau một số tìm kiếm và thử nghiệm, tôi đã thử:
- Gọi
render()
vềol.Map
chính nó. - Gọi
dispatchChangeEvent()
vàool.source.Vector
- Gọi
redraw()
vàool.layer.Vector
Chúng được đề xuất nhưng không có cái nào hoạt động, điều này không gây ngạc nhiên vì chỉ có phương pháp đầu tiên thậm chí được liệt kê trong tài liệu API OpenLayers 3.2.0 và nó không được đánh dấu là ổn định.