所以,我正在使用Ember.js的Open Layers 3来制作一个仪表板,我已经动态地加载了地图,但是当我离开这条路线时我想要它被摧毁,我发现的唯一的东西就是地图。 destroy()但它是旧版本的API,并且在新版本中似乎没有。
我多次进入地图页后使用了chrome调试器,发现我有29个ol.Map对象。
这是我到目前为止所拥有的
App.MapView = Ember.View.extend({
map: null,
didInsertElement: function() {
this.map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.MapQuest({layer: 'sat'})
})
],
view: new ol.View({
center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
zoom: 4
})
});
},
willDestroyElement: function() {
// destroy this.map
}
});
我无法在有关删除地图的文档中找到任何内容。
提前致谢。
答案 0 :(得分:20)
你应该尝试这样做:
App.MapView = Ember.View.extend({
// if you are not using Ember.get/set you'd better make this "private"
_map: null,
didInsertElement: function() {
this._map = new ol.Map(...);
},
willDestroyElement: function() {
this._map.setTarget(null);
this._map = null;
}
});
它将地图与其元素分离,并允许正确的垃圾收集。如果有的话,不要忘记删除对地图对象的任何其他引用。