我在Meteor.js中有一个带有Handlebar模板的多重选择。在第一次渲染时,一切都很好(“Politics”和“People”按预期预先选择):
只要重新呈现模板(因为会话变量发生变化,例如Session.set("foo", "Hello World!")
),就不再预先选择第三个选项:
我的设置:
<template name="select">
<select name="foo" multiple>
<option value="1">Tech</option>
<option value="2" selected>Politics</option>
<option value="3" selected>People</option>
</select>
</template>
<template name="test">
{{foo}}
{{> select}}
</template>
{{> test}}
Template.test.helpers(
foo: ->
Session.get("foo")
)
你知道为什么在重新渲染之后再选择这些选项了吗?
答案 0 :(得分:1)
解决方案是:
<template name="test">
{{#isolate}}
{{foo}}
{{/isolate}}
{{> select}}
</template>
通常,重新渲染的确切程度并不重要,但如果你 想要更多的控制,比如出于性能原因,可以使用 {{#isolate}} ... {{/ isolate}}帮助器。建立了数据依赖性 #isolate块内部是本地化的块,不会在 它们自己导致父模板被重新渲染。这个块 助手基本上传达了你所获得的反应性好处 将内容拉出到新的子模板中。
如果您将{{foo}}
放在{{#isolate}} ... {{/isolate}}
内,则不会重新呈现父模板,因此{{> select}}
也不会受到影响。
答案 1 :(得分:0)
所以我不确定您为什么要放弃多重选择,但我建议您在{{#isolate}}
模板周围添加{{> select}}
标记。这应该保持模板不被重新渲染。如果您的选择模板因其数据更改而重新渲染,则无济于事。希望有所帮助...