MarionetteJS View Controller como um módulo RequireJS

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