Sto lavorando a un'applicazione backbone.js e ho raggiunto il punto in cui ho un numero di router e viste che rappresentano ciascuna parte della mia applicazione. Nell'esempio del router semplificato di seguito, ho due posizioni; account
& users
.Pulizia delle viste con backbone.js?
Entrambe le viste in ogni posizione rendono il loro contenuto a un elemento reciproco, denominato #appcontainer
. Il mio buon senso dice che dovrei assicurarmi di remove
ogni vista prima di avviarne un'altra per evitare collisioni tra associazioni, DOM e quant'altro.
Tuttavia, poiché non posso sapere con certezza se una vista è già stata creata, non è possibile chiamare esplicitamente previousView.remove()
dall'interno del router o delle visualizzazioni.
Sarebbe sufficiente aggiungere $(this.el).empty()
al costruttore di ogni vista per eliminare eventuali collegamenti ed elementi precedenti dal DOM?
Ecco l'esempio del router?
var myRouter = Backbone.Router.extend({
routes: {
"account": "account",
"users": "users"
},
account: function() {
view = new AccountView({});
view.render();
},
users: function() {
view = new UserView({});
view.render();
}
});
Ciao! Grazie per la tua risposta. Il metodo '.remove()' -method di jQuery si separa da backbones '.remove()' sulle viste? – Industrial
Backbone's .remove() è solo un alias per jquery's .remove(), quindi per questi scopi sono uguali. – MrGrigg
@MrGrigg ** Potresti chiarire dove andrebbe il metodo di rendering? Sembra che vada nel router stesso, ma voglio essere sicuro ... ** _ Mi piace molto l'aspetto di questo codice e, a prima vista, sembra che sarebbe un bel modo per strutturare un'applicazione. – Emerson