在Meteor应用程序中设置Textarea值的正确方法是什么?

时间:2012-08-14 20:31:27

标签: meteor

目前,如果代码包含类似

的内容
<div>{{some_value}}</div>

完美无缺。 而

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

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

2 个答案:

答案 0 :(得分:6)

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

  

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

     

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

Meteor不会更新具有焦点的<input><textarea>,因为在许多情况下,如果用户试图输入内容,这对用户来说会非常具有破坏性(假设您正在输入一个段落)在突然被覆盖的领域)。但是,它确实意味着用户在与另一个用户或其他被动变更发生冲突时不会获得更新。如果要覆盖此行为,您可能有一个隐藏的<div>或js数据元素,您可以使用它来为您的应用程序进行适当的更新(可能标记有新值或简单地覆盖它) 。这种碰撞并非易事,可能需要根据具体情况采取不同的行为。也许Meteor的未来版本将为我们提供一些工具来简化处理。有关更多背景信息,请参阅this post

答案 1 :(得分: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>