热门代码推送后如何保留文本输入值

时间:2014-05-09 08:02:09

标签: meteor

我的Meteor应用程序涉及用户将相当多的文本输入textarea。如果在用户输入文本时发生热代码推送,页面将刷新并失去工作。

要重现此行为:

  • 创建一个新的流星应用程序;
  • 将文本输入添加到html;
  • 运行应用;
  • 在文本字段中输入内容;和
  • 通过调整js或html并保存来触发热代码刷新。

热门代码刷新将删除您在文本输入中输入的内容。

有没有办法避免这种情况发生?有没有人对黑客或变通方法有任何建议?

1 个答案:

答案 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", ...)

更新文本区域