getController() crea un nuovo oggetto controller e memorizza riferimento ad esso in controllers
matrice.
Ciò significa che se il controller viene caricato utilizzando getController(), non verrà eliminato, poiché nella proprietà controllers
dell'oggetto Applicazione verrà sempre memorizzato almeno un riferimento.
Per caricare controllore in modo tale che sarà distrutto (liberare la memoria che occupa) appena perderà alcun riferimento a oggetti esistenti (elementi DOM, componenti Ext, le sue viste, ecc) si dovrebbe usare Ext.create invece di getController().
ecco il codice:
var loadedController = Ext.create(
me.app.getModuleClassName(controller_name, 'controller'),
{
application: me.app,
id: Ext.id(null, 'controller')
}
);
loadedController.init(me.app);
loadedController.onLaunch(me.app);
loadedController
sarà variabile locale e sarà uscire dal campo di applicazione. L'unica cosa che continuerà a legare il controllore appena creato alla "vita reale" saranno gli elementi che il controllore crea da sé.
Ad esempio, il controller può creare una nuova vista nel suo metodo onLaunch(), che verrà iniettato in DOM, e il controller ascolterà per visualizzare gli eventi utilizzando i gestori che eseguono il binding nel suo metodo init(). Finché esisterà la visualizzazione, anche il controllore esisterà. Ma quando l'utente chiude la vista, la vista sarà distrutta e poiché è stato l'ultimo riferimento al nostro controller, anche il controller verrà distrutto.
UPDATE
ascoltatori creati con regolatore vengono aggiunti alla Ext.app.EventBus e possono impedire la rimozione automatica del regolatore, perché anche loro possono tenere riferimenti a tale controllo.
Buona risposta, hai approfondito l'argomento :) –
Buona risposta! Dovrebbe essere posizionato per la richiesta di funzionalità a sencha – sra
Buona risposta, hai coperto tutto ciò che deve essere cancellato :) Come si verifica se il controller è veramente cancellato? – bhovhannes