2014-09-23 7 views
8

Quindi, sto usando Open Layers 3 con Ember.js per creare un dashboard, e ho caricato la mappa in modo dinamico ma voglio che venga distrutta quando esco dal percorso, l'unica La cosa che ho trovato era map.destroy() ma è per una vecchia versione dell'API e non sembra che ce ne sia una nella nuova versione.Decostruire una mappa Open Layers 3

Ho usato il debugger di Chrome dopo essere passato alla pagina della mappa un paio di volte e ho scoperto che avevo 29 oggetti di tipo OL.

Questo è quello che ho finora

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

non posso trovare niente nella documentazione sulla rimozione di mappe.

Grazie in anticipo.

risposta

18

Si dovrebbe provare a fare qualcosa di simile:

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

si distacca la mappa dal suo elemento e permette una corretta raccolta dei rifiuti. Non dimenticare di rimuovere anche altri riferimenti all'oggetto della mappa, se presenti.

+5

setTarget (null) - grazie! –