2014-05-09 37 views
1

我的流星應用程序涉及用戶輸入文本到textarea中的文本。如果在用戶輸入文本時發生熱代碼推送,則頁面刷新並失去工作。如何保留文本的值熱代碼推後的輸入

要重現此問題:

  • 創建一個新的流星應用;
  • 在html中添加文本輸入;
  • 運行應用程序;
  • 在文本字段中輸入內容;和
  • 通過調整js或html並保存來觸發熱代碼刷新。

熱碼刷新將刪除您輸入到文本輸入中的任何內容。

有什麼方法可以避免這種情況發生?有沒有人對黑客或變通辦法有任何建議?

+1

您更新文本區域可以使用http://garlicjs.org/之類的東西,或者用https://github.com/mozilla/localForage編寫自己的解決方案 –

+0

相關:https://github.com/meteor/meteor/issues/1969 –

回答

3

會話在HCR期間保留,因此您可以嘗試將文本字段與Session變量同步。例如:

<template name="textArea"> 
    <textarea>{{textAreaValue}}</textarea> 
</template> 

Template.textArea.helpers({ 
    textAreaValue: function() { 
    return Session.get("textAreaValue") || ""; 
    } 
}); 

Template.textArea.events({ 
    "input textarea": function (evt) { 
    Session.set("textAreaValue", evt.currentTarget.value); 
    } 
}); 

注意,這將導致每個字符鍵入之後textArea模板重新運行。與Blaze這不應該是太大的問題,但如果你想避免這種情況,使用Deps.nonreactive

textAreaValue: function() { 
    return Deps.nonreactive(function() { 
     return Session.get("textAreaValue") || ""; 
    }); 
    } 

雖然那麼你將無法使用Session.set("textAreaValue", ...)