Tengo una vista de correo electrónico en mi aplicación Backbone. Actualmente está instanciado en la acción view
de mi controlador. Se va un poco así:Al cambiar el modelo para una vista, ¿es mejor reemplazar el modelo o crear una vista nueva?
routes: {
'email/:id': email
},
//...
email: function (id) {
var email = new Email({
id: id
});
this.emailView = new EmailView({
model: email
});
email.fetch();
}
Ahora, el problema es, si volviese a un correo electrónico, y luego otro, que terminan creando dos separados EmailView
s. Esto significa que, por ejemplo, el enlace de eliminación en el EmailView
está vinculado a dos modelos de Email
por separado, por lo que al hacer clic en eliminar se eliminarán ambos (algo que no es bueno).
Estoy buscando dos soluciones. En uno, guardaría en caché el EmailView
y actualizaría su modelo. El problema entonces es que tendría que volver a enlazar el events
en EmailView
.
La otra solución sería crear un nuevo EmailView
como lo estoy actualmente, pero desvincular los eventos del viejo EmailView.el
antes de reemplazarlo.
¿Voy por esto de la manera correcta? ¿Hay una mejor manera de manejar esta situación? Saludos de antemano.
El único problema es que no se trata simplemente de tirar el viejo EmailView. Los detectores de DOM no están sueltos, por lo que impiden que la vista anterior sea recogida como basura. Luego, cuando alguien hace clic en 'eliminar', todos los viejos EmailViews los recogen. Creo que la respuesta es desvincular manualmente a esos oyentes antes de reemplazar la vista de correo electrónico. – Skilldrick
Ahora me tiene preocupado por mi propio código;) – bradgonesurfing
Mire el documento para jquery :: remove. http://api.jquery.com/remove/ a lo que Backbone.js llama. Los controladores de eventos se recogen automáticamente como basura para todos los elementos secundarios de la vista. Aún necesitaría desconectarse del encuadernado del modelo y los enlaces a otras vistas. Sin embargo, vincular a otras vistas es malo. Los eventos de Vista a Ver deben activarse a través de modelos. – bradgonesurfing