Я продолжаю сталкиваться с этой проблемой снова и снова. У меня есть представление со входом, и я хочу устанавливать и обновлять вещи на каждом событии keyUp. Проблема заключается в том, что set вызван тем, что запускает событие изменения, которое повторно отображает представление, которое заставляет вход потерять фокус. Поэтому после того, как пользователь набирает один символ, вход теряет фокус, и они больше не могут печатать.Повторный рендеринг вызывает вход для потери фокуса
Другой случай, когда это происходит, когда пользователь нажимает на вход, я хочу добавить класс в div вокруг ввода, чтобы он менял цвет. Это, конечно, заставляет представление повторно отображать и вход теряет фокус. Я не могу просто сделать отдельное представление для ввода, потому что вход находится внутри div, который я хочу повторно отобразить.
Вот простой пример.
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()});
},
});
До сих пор я получил вокруг него с помощью {молчать: истинно} и обновление вещи вручную, но это создает беспорядок.
Да, в представлении уже есть текст, который пользователь набрал, но я хочу делать другие вещи для представления в зависимости от того, что они набирают. Когда они нажимают на ввод, я хочу установить выбранную модель, которая вызывает событие изменения, которое повторно отображает представление с тем, который выглядит выбранным, что заставляет представление потерять фокус. – Dan