Деконструкция карты Open Layers 3

Итак, я использую Open Layers 3 с Ember.js для создания панели инструментов, и я сделал динамическую загрузку карты, но я хочу, чтобы она уничтожалась, когда я покидаю маршрут, единственное, что я нашел, это map.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
  }
});

Я не могу найти ничего в документах об удалении карт.

Заранее спасибо.


person Henrik    schedule 23.09.2014    source источник
comment
Почему бы не использовать map.dispose() ?   -  person arm    schedule 19.07.2020


Ответы (1)


Вы должны попробовать сделать что-то вроде этого:

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;
  }
});

Он отделяет карту от ее элемента и позволяет корректно собирать мусор. Не забудьте также удалить любые другие ссылки на объект карты, если таковые имеются.

person Huafu    schedule 23.09.2014
comment
Представьте, что у меня есть раскрывающийся список, который позволяет вам переключаться между объектами карты, которые содержат совершенно разные слои, векторные источники, объекты и т. д. Когда я перехожу к карте 2, я хочу, чтобы все, начиная с карты 1, было полностью уничтожено. Подходит ли setTarget(null)? - person Murphybro2; 03.05.2018
comment
Я думаю, вам придется уничтожить все по одному. НО вот давно я не пользовался картой открытых слоев И это другой вопрос; поэтому я предлагаю вам задать свой вопрос как новый вместо комментария здесь - person Huafu; 06.05.2018