Esta é minha primeira postagem de dica profissional, então estou apenas chutando os pneus aqui …
Encontrei um problema comum no Backbone, em que minhas visualizações não eram limpas depois que tentei removê-las; criando assim zumbis de vazamento de memória.
Este exemplo de código é uma refatoração da excelente postagem de Derick e 99% do crédito vai para ele – vou levar 1% do crédito do promotor por colocá-lo junto no Requirejs e adicionar alguns argumentos que gosto de passar opcionalmente em cada render.
define([
'jquery',
'underscore',
'backbone',
'marionette'
], function($, _, Backbone, Marionette) {
var AppViewController = Backbone.Marionette.Controller.extend({
currentView: null,
showView: function(view, bSelfRender, stateStr ) {
var that = this;
if (that.currentView) {
console.debug("AppViewController - view removed");
that.currentView.remove();
that.currentView.unbind();
that.currentView = null;
}
that.currentView = view;
if (!bSelfRender) that.currentView.render( stateStr );
}
});
return AppViewController;
});
Agora, antes de querer exibir qualquer visão, usarei um controlador de visão primeiro para gerenciar este processo.
var viewController = new AppViewController();
var oneView = new OneView( { model: mainModel });
var twoView = new TwoView( { model: mainModel });
viewController.showView(oneView, false, "contentCreation");
Depois de terminar com esta visualização, usarei o viewController novamente para fazer a transição para a próxima visualização (ou de volta para uma nova versão da primeira visualização), sabendo que a primeira visualização foi limpa com segurança
viewController.showView(twoView, false, "contentCreation");