我試圖保存模糊用戶內容,並遇到一個奇怪的用戶界面凍結後,我從來沒有見過的保存。流星收集更新焦點和模糊延遲
模板的簡化版本:
{{#each UserSession.getQuestions}}
<textearea class='question'>{{UserSession.getVal this._id}}</teaxtarea>
{{/each}}
換句話說,我們遍歷從Questions
集合,選擇所有問題,用戶必須回答一個光標,我們填充textarea
從一個值UserSessions
包含此用戶對該問題的回覆的集合。對於它的價值,textarea
實際上是在它自己的模板中(還有其他的東西要顯示在那裏,所以我想最好讓它們隔離)。
用戶可以修改自己的響應的內容,然後我有一個事件處理程序,基本上做到這一點:
"blur .question": function(e) {
var val = $(e.target).val();
var questionId = this._id;
var userSessionId = Meteor.user().getSessionId();
var modifier = {$set: {}};
modifier["$set"]["questions." + questionId + "] = val;
UserSessions.update({_id: userSessionId}, modifier);
}
更新成功,但瀏覽器凍結的保存執行後約一秒鐘,所以如果模糊是由用戶點擊另一個元素觸發的,則該元素不會乾淨地聚焦。這是一個問題,因爲我也想在用戶打字時進行定期保存,但是當我這樣做時,打嗝會打斷打字:由此產生的體驗非常殘酷。
有趣的是,當更新的屬性是一個對象或列表中時,瀏覽器似乎只會凍結。換句話說:
UserSessions.update({_id: userSessionId}, {$set: {"questions.questionId": "someVal"}})
導致凍結,因爲UserSessions.update({_id: userSessionId}, {$set: {"lastSavedAt": new Date()}})
。
但是,UserSessions.update({_id: userSessionId}, {$set: {"someOtherProp": "someVal"}})
工作正常。
我已經嘗試了幾種不同的方法,包括一個異步客戶端模式,並通過流星方法在if (Meteor.isServer)
塊中執行保存 - 所有相同的結果。必須與發佈更新有關,但即使將發佈功能查詢設置爲{reactive: false}
,也會發生這種情況。
我出來的想法。一如既往,您的幫助將不勝感激。
由於提前, DB