Sto creando un'applicazione a singola pagina, e sono abbastanza nuovo per il backbone. Ho un problema con la creazione di più viste che utilizza lo stesso wrapper-div.backbone remove view cancella el
La mia configurazione:
Ho aggiunto una funzione vicino a tutte le viste:
Backbone.View.prototype.close = function(){
this.remove();
this.off();
if (this.onClose){
this.onClose();
}
}
Ho un involucro-div dove voglio rendere vista, rimuoverli e rendere nuovi. Quindi il mio SetupView assomiglia a questo:
app.SetupView = Backbone.View.extend({
el: '#my_view_wrapper',
...
});
Dalla funzione dove sostituisco vista chiudo la corrente (aperto) Vista in questo modo:
var v = this.model.get('view');
v.close();
Domanda
mio problema è che Ho più viste che usano lo stesso wrapper-div. Ma quando chiudo una vista, questo wrapper-div sembra essere rimosso, e la prossima vista che cerco di creare non può trovare questo div.
Immagino che ci sia una soluzione facile? Voglio riutilizzare lo stesso wrapper e rimuovere solo la vista al suo interno, non il wrapper stesso.
'remove' rimuove l'elemento dal DOM. Ma penso di aver frainteso 'el'. Ho pensato che fosse il luogo in cui il nuovo elemento è stato iniettato, ma ora ho imparato che diventa parte del nuovo elemento, e quindi viene rimosso quando chiamo 'remove'. – swenedo
Giusto. In generale, è meglio lasciare che ogni vista gestisca il proprio 'el': la vista dovrebbe creare il suo' el', fare le cose e rimuoverlo quando la vista viene rimossa. Il chiamante mette il 'el' della vista dentro un contenitore controllato dal chiamante. Non riutilizzare gli elementi DOM per più viste consente di evitare molti problemi. –
@muistooshort - un buon consiglio. mai pensato a questo - ha perfettamente senso. grazie. – cheshireoctopus