我已经在Meteor做了一个手表类型的实时聊天服务,但是我在Meteor中内置的元素保存功能时遇到了问题。基本上,我需要当前的聊天消息div不会更新,而其中的文本输入有焦点。该文档具有以下说明:流星应用程序中的元素保存错误
手写应用程序中的另一个棘手问题是元素 保存。假设用户正在将文本输入到元素 中,然后包含该元素的页面区域被重画。 用户可能在颠簸行程中,因为重新创建焦点时,光标 位置,部分输入的文本以及重音字符输入 状态将会丢失。
这是Meteor自动解决的另一个问题。只需让 确定每个可聚焦元素都有唯一的ID,或者 的名称在具有ID的最近父级中具有唯一性。 流星将保留这些元素,即使它们的封闭模板 被重新渲染,但仍会更新其子项并复制任何 属性更改。
按照这些说明,我为我的输入字段设置了一个唯一的ID,以确保它在输入时不会被重新呈现。但是现在我面临以下两个问题:
对方的聊天消息在键入时更新,但此更新在我输入自己的消息时暂停。只要我停止输入(即使我的输入字段有焦点),他们的消息开始再次更新。
当创建新消息并插入其div时,即使其输入字段具有焦点,我的消息也会更新/重新呈现。这导致它突然失去焦点。
您可以在同一个聊天室http://babble.im的两个不同的计算机/用户测试此项。
这是Meteor代码或我自己的错误吗?我如何知道?
编辑:
嗯,我想我找到了第一个问题的原因:
流星一般批处理的任何需要更新,并执行它们只有 当你的代码没有运行。这样,您可以确定DOM 不会从您下方更换。有时你想要相反的行为 行为。例如,如果您刚刚在 数据库中插入记录,则可能需要强制更新DOM,以便使用jQuery等库可以找到 新元素。在这种情况下,请致电 Meteor.flush立即更新DOM。
我猜我的代码在用户输入时正在运行,所以DOM没有被更新。我会尝试使用Meteor.flush
来修复它。现在第二个问题出现了什么问题?
你可以发布最小的可能的流星应用程序,复制这个问题? – Milimetric 2012-10-27 01:46:06