Continuo a ripetermi questo problema ancora e ancora. Ho una vista con un input e voglio impostare e aggiornare le cose su ogni evento keyUp. Il problema è quando viene chiamato set che innesca un evento change che re-rende la vista che fa perdere l'attenzione all'input. Quindi, dopo che l'utente digita un carattere, l'input perde lo stato attivo e non possono più digitare.La visualizzazione di ri-rendering fa sì che l'input perda la messa a fuoco
Un altro caso in cui ciò accade è quando l'utente fa clic su un input. Desidero aggiungere una classe al div attorno all'ingresso in modo che cambi colore. Questo naturalmente fa sì che la vista venga ri-renderizzata e l'input perda fuoco. Non posso semplicemente creare una vista separata per l'input perché l'input è all'interno del div che voglio ri-render.
Ecco un semplice esempio.
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()});
},
});
Finora ci sono riuscito usando {silent: true} e aggiornando le cose manualmente, ma questo crea confusione.
Sì, la vista ha già il testo che l'utente ha digitato ma voglio fare altre cose alla vista a seconda di cosa digita. Quando fanno clic su un input, voglio impostare il modello come selezionato che chiama un evento change che re-renderizza la vista con uno che sembra selezionato e che fa sì che la vista perda il focus. – Dan