3

目前,如果代码包含类似

<div>{{some_value}}</div>

完美运行。然而

<textarea>{{some_val}}</textarea> 

仅当光标不在文本框中时有效

4

2 回答 2

6

这是故意的 Meteor 行为。在文档中:

手写应用程序中的另一个棘手问题是元素保存。假设用户在一个元素中输入文本,然后包含该元素的页面区域被重绘。用户可能会遇到颠簸,因为焦点、光标位置、部分输入的文本和重音字符输入状态将在重新创建时丢失。

这是 Meteor 自动解决的另一个问题。只需确保您的每个可聚焦元素都具有唯一的 id,或者在具有 id 的最近的父级中具有唯一的名称。Meteor 将保留这些元素,即使它们的封闭模板被重新渲染,但仍会更新它们的子元素并复制任何属性更改。

Meteor 不会更新具有焦点的<input>or <textarea>,因为在许多情况下,如果用户尝试输入某些内容,这会对用户造成很大的干扰(想象一下,当突然被覆盖时,您正在字段中键入一个段落)。但是,这确实意味着用户在与另一个用户“冲突”或其他反应性更改时不会获得更新。如果你想覆盖这个行为,你可能有一个隐藏的<div>或一个 js 数据元素,你可以使用它来为你的应用程序进行适当的更新(也许标记有一个新值或简单地覆盖它)。这种碰撞并非易事,可能需要根据情况采取不同的行为。也许未来版本的 Meteor 会为我们提供一些工具来简化处理。有关更多背景信息,请参阅这个帖子

于 2012-08-23T00:06:37.080 回答
0

<textarea>{{some_val}}</textarea>当该领域获得和失去焦点时,对我来说都很好。

我希望你在做,

Template.mytemplate.some_val = "Whatever you want to write";

或者

Template.mytemplate.some_val = function() {
    var someValue = "Whatever you want to write"; // Can also get from DB
    return someValue;
}

与模板,

<template name="mytemplate">
    <textarea>{{some_val}}</textarea>
</template>
于 2012-08-21T12:15:44.670 回答