【发布时间】:2015-08-13 22:51:01
【问题描述】:
下面的(简化的)模板呈现了一个带有两个输入字段的表单,这些字段是根据数据上下文预先填写的。可以为多个不同的数据上下文打开表单(尽管一次只能打开一个),在这种情况下,我希望所有字段都使用新数据重新呈现 - 大多数情况下会发生这种情况。
<template name="form">
<input type="text" value="{{title}}">
<input type="text" value="{{start_value}}">
</template>
当两个数据上下文的任一字段具有相同的值时,就会出现问题 - 例如start_value 为 0 很常见。这种情况下,数据上下文切换时不会重新渲染相应的输入字段。或许可以举个例子:
- 用户使用
start_value = 0打开数据上下文的表单 - 用户将
start_value对应的输入字段从0更改为12 - 用户关闭表单而不保存
- 用户使用
start_value = 0打开另一个数据上下文的表单 -
start_value对应的字段仍然显示12
这似乎发生在所有(原始)相同的值上。使用帮助程序返回值没有任何改变,但确实确认帮助程序正在按预期重新运行。
我可以在模板实例上使用 autorun-afterflush 来显式更新输入字段来解决此问题,但是是否有更惯用的方法来使 Meteor 重新呈现“未更改”字段?
编辑:
这里是working example(我所说的工作是指它显示了什么不起作用)。
只需在干净的 Meteor 项目的客户端目录中创建这两个文件,您应该能够观察到行为。第 1 项和第 2 项具有保存 value,因此即使您手动更改了第二个输入字段,当您在它们之间切换时也不会更改。第 3 项和第 4 项具有相同的title 并表现出相似的行为。
【问题讨论】:
-
你能发布你的模板助手和其他js代码吗?我自己没有遇到过这种行为。
-
@FullStack 我在问题中添加了一个完整的示例。
标签: javascript meteor meteor-blaze