Ошибка сохранения элементов в приложении Meteor.

Я сделал часы-,-когда-я-ввожу сервис чата в реальном-времени в Meteor, но я возникли проблемы со встроенной-функцией сохранения элементов в Meteor. По сути, мне нужно, чтобы текущий div сообщения чата не обновлялся, пока ввод текста в нем имеет фокус. В документации есть следующие инструкции:

Еще одна сложная проблема в написанных вручную-приложениях — элемент сохранение. Предположим, что пользователь вводит текст в элемент, а затем область страницы, которая включает этот элемент, перерисовывается. Пользователь может попасть в неприятную ситуацию, так как фокус, курсор позиция, частично введенный текст и ввод символов с диакритическими знаками состояние будет потеряно при воссоздании.

Это еще одна проблема, которую Meteor решает автоматически. Просто сделай убедитесь, что каждый из ваших фокусируемых элементов либо имеет уникальный идентификатор, либо имеет имя, уникальное среди ближайшего родителя, имеющего идентификатор. Meteor сохранит эти элементы, даже если окружающий их шаблон перерисовывается, но по-прежнему будет обновлять своих дочерних элементов и копировать любые изменения атрибута.

Следуя этим указаниям, я установил уникальный идентификатор для своего поля ввода, чтобы гарантировать, что оно не будет повторно-отображаться, пока я печатаю в нем. Но теперь я столкнулся со следующими двумя проблемами::

сообщения чата другого человека обновляются по мере их ввода, но это обновление приостанавливается, пока я печатаю собственное сообщение. Как только я перестаю печатать (, даже если мое поле ввода имеет фокус ), их сообщение снова начинает обновляться.

Когда создается новое сообщение и вставляется его div, мое сообщение обновляется / пере-рендерится, даже если его поле ввода имеет фокус. Это приводит к тому, что он внезапно теряет фокус.

Вы можете проверить это на двух разных компьютерах/пользователях в одном и том же чате по адресуhttp://babble.im.

Это ошибка в коде Meteor или моя ошибка? Как я могу узнать?

Редактировать:

А, кажется, я нашел причину первой проблемы:

Meteor обычно собирает все необходимые обновления и выполняет только их когда ваш код не работает. Таким образом, вы можете быть уверены, что DOM не изменится из-под вас. Иногда хочется наоборот поведение. Например, если вы только что вставили запись в базу данных, вы можете принудительно обновить DOM, чтобы вы могли найти новые элементы с помощью библиотеки, такой как jQuery. В таком случае звоните Meteor.flush для немедленного обновления DOM.

Я предполагаю, что мой код выполнялся, пока пользователь печатал, поэтому DOM не обновлялся. Я попытаюсь использовать Meteor.flush, чтобы исправить это. А что со второй проблемой?

6
задан Chetan 18 April 2012 в 07:39
поделиться