2

我在 Meteor.js 中有一个带有 Handlebar 模板的多项选择。在第一次渲染时,一切都很好(“政治”和“人”按预期预选):

第一次渲染时多选

一旦必须重新渲染模板(因为 Session 变量发生变化,例如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")
)

您是否知道为什么在重新渲染后不再预先选择这些选项?

4

2 回答 2

1

解决方案是:

<template name="test">
  {{#isolate}}
    {{foo}}
  {{/isolate}}      
  {{> select}}
</template>

通常,重新渲染的确切程度并不重要,但如果您想要更多控制,例如出于性能原因,您可以使用 {{#isolate}}...{{/isolate}} 助手。在#isolate 块中建立的数据依赖关系被本地化到块中,并且它们本身不会导致父模板被重新渲染。这个块助手本质上传达了通过将内容拉出到新的子模板中可以获得的反应性好处。

如果你放在{{foo}}里面,{{#isolate}} ... {{/isolate}}那么父模板不会被重新渲染,所以也{{> select}}不会受到影响。

于 2013-08-01T05:54:13.957 回答
0

因此,我不确定您为什么会丢失多项选择,但我可以建议您在模板{{#isolate}}周围放置一个标签。{{> select}}这应该可以防止重新渲染模板。尽管如果您选择的模板由于其数据更改而重新呈现,这将无济于事。希望有帮助...

于 2013-08-01T00:40:58.977 回答