javascript - template - github backbone
backbone remove view elimina el (2)
Estoy creando una aplicación de una sola página, y soy bastante nuevo en la red troncal. Tengo un problema al crear vistas múltiples que usa el mismo wrapper-div.
Mi configuración:
He agregado una función cercana a todas las vistas:
Backbone.View.prototype.close = function(){
this.remove();
this.off();
if (this.onClose){
this.onClose();
}
}
Tengo un wrapper-div donde quiero renderizar vistas, eliminarlas y renderizar nuevas. Entonces mi SetupView se ve así:
app.SetupView = Backbone.View.extend({
el: ''#my_view_wrapper'',
...
});
Desde la función donde intercambio de vistas cierro la vista actual (abierta) como esta:
var v = this.model.get(''view'');
v.close();
Pregunta
Mi problema es que tengo varias vistas usando el mismo wrapper-div. Pero cuando cierro una vista, este wrapper-div parece ser eliminado, y la siguiente vista que trato de crear no puede encontrar este div.
¿Supongo que hay una solución fácil? Quiero reutilizar el mismo contenedor, y solo eliminar la vista dentro de él, no el envoltorio mismo.
En su escenario, no use un elemento DOM existente como su valor "el". Backbone creará el elemento para ti. Cuando crea una instancia de su vista, puede hacer lo siguiente para adjuntarla a su elemento de envoltura existente.
$(viewName.render().el).appendTo(''#my_view_wrapper'');
Solo como una adición (para referencia posterior): otra opción es sobrescribir las subvistas remove
para que simplemente vacíe $el
lugar de eliminarlo. P.ej.
remove: function() {
this.$el.empty().off(); /* off to unbind the events */
this.stopListening();
return this;
}
Personalmente, prefiero esto, ya que elimina la necesidad de insertar elementos de envoltura que no tienen un uso real.