2012-04-18 84 views
6

我已經在Meteor做了一個手錶類型的實時聊天服務,但是我在Meteor中內置的元素保存功能時遇到了問題。基本上,我需要當前的聊天消息div不會更新,而其中的文本輸入有焦點。該文檔具有以下說明:流星應用程序中的元素保存錯誤

手寫應用程序中的另一個棘手問題是元素 保存。假設用戶正在將文本輸入到元素 中,然後包含該元素的頁面區域被重畫。 用戶可能在顛簸行程中,因爲重新創建焦點時,光標 位置,部分輸入的文本以及重音字符輸入 狀態將會丟失。

這是Meteor自動解決的另一個問題。只需讓 確定每個可聚焦元素都有唯一的ID,或者 的名稱在具有ID的最近父級中具有唯一性。 流星將保留這些元素,即使它們的封閉模板 被重新渲染,但仍會更新其子項並複製任何 屬性更改。

按照這些說明,我爲我的輸入字段設置了一個唯一的ID,以確保它在輸入時不會被重新呈現。但是現在我面臨以下兩個問題:

對方的聊天消息在鍵入時更新,但此更新在我輸入自己的消息時暫停。只要我停止輸入(即使我的輸入字段有焦點),他們的消息開始再次更新。

當創建新消息並插入其div時,即使其輸入字段具有焦點,我的消息也會更新/重新呈現。這導致它突然失去焦點。

您可以在同一個聊天室http://babble.im的兩個不同的計算機/用戶測試此項。

這是Meteor代碼或我自己的錯誤嗎?我如何知道?

編輯:

嗯,我想我找到了第一個問題的原因:

流星一般批處理的任何需要更新,並執行它們只有 當你的代碼沒有運行。這樣,您可以確定DOM 不會從您下方更換。有時你想要相反的行爲 行爲。例如,如果您剛剛在 數據庫中插入記錄,則可能需要強制更新DOM,以便使用jQuery等庫可以找到 新元素。在這種情況下,請致電 Meteor.flush立即更新DOM。

我猜我的代碼在用戶輸入時正在運行,所以DOM沒有被更新。我會嘗試使用Meteor.flush來修復它。現在第二個問題出現了什麼問題?

+0

你可以發佈最小的可能的流星應用程序,複製這個問題? – Milimetric 2012-10-27 01:46:06

回答

2

第一個問題的原因是,Meteor用於在任何方法處於運行狀態時凍結對本地數據庫緩存的所有更改。流星0.5.1改進了這一點,只凍結你在本地修改的文檔的更改。我懷疑Meteor 0.5.1修復了這個問題。有關更多信息,請參閱http://meteor.com/blog/2012/11/19/latency-compensation-improvements-coming-soon-in-meteor-051

第二個問題可能通過在Meteor 0.4.2中添加preserve-inputs包得到解決,但很難確定沒有更多細節。

我很想知道您的問題是否仍然存在於當前版本的Meteor中!