我的Meteor应用程序涉及用户将相当多的文本输入textarea。如果在用户输入文本时发生热代码推送,页面将刷新并失去工作。
要重现此行为:
热门代码刷新将删除您在文本输入中输入的内容。
有没有办法避免这种情况发生?有没有人对黑客或变通方法有任何建议?
答案 0 :(得分: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", ...)