Me sigo encontrando con este problema una y otra vez. Tengo una vista con una entrada y quiero configurar y actualizar cosas en cada evento keyUp. El problema es cuando se llama al conjunto, desencadena un evento de cambio que vuelve a representar la vista, lo que hace que la entrada pierda el foco. Entonces, después de que el usuario escribe un carácter, la entrada pierde el foco y ya no puede escribir.La vista de re-rendering hace que la entrada pierda el foco
Otro caso donde esto sucede es cuando el usuario hace clic en una entrada. Quiero agregar una clase al div alrededor de la entrada para que cambie de color. Por supuesto, esto hace que la vista vuelva a reproducirse y la entrada pierda el foco. No puedo simplemente hacer una vista separada para la entrada porque la entrada está dentro del div que quiero volver a renderizar.
Aquí hay un ejemplo simple.
itemView = Backbone.View.extend({
events: {
"keyup .itemInput": "inputKeyUp"
}
initialize: function(){
this.model.view = this;
this.bind('change', this.render());
this.render();
},
render: function(){
$(this.el).html($(ich.itemView(this.model.toJSON())));
return this;
},
inputKeyUp: function(e) {
this.model.set({name: $(this.view.el).find('input[type=text]').first().val()});
},
});
Hasta ahora lo he solucionado usando {silent: true} y actualizando las cosas manualmente, pero esto crea un desastre.
Sí, la vista ya tiene el texto que el usuario tipeó, pero quiero hacer otras cosas a la vista según lo que escriben. Cuando hacen clic en una entrada, quiero configurar el modelo como seleccionado, que llama a un evento de cambio que vuelve a mostrar la vista con uno que parece seleccionado, lo que hace que la vista pierda su foco. – Dan