2013-07-31 82 views
2

我有一個多重選擇與Meteor.js Handlebar模板。在第一次渲染,一切都很好(如預期的「政治」與「人」的預選):流星:預選選項丟失後,多次選擇

Multiple select on first render

只要模板必須被重新描繪(因爲會話變量的變化,如Session.set("foo", "Hello World!"))第三個選項不再被預選:

Multiple select after dynamic changes

我的設置:

<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

所以我不確定爲什麼你失去了多重選擇,但我可以推薦你在你的{{> select}}模板上放一個{{#isolate}}標籤。這應該保持模板不被重新渲染。儘管如果您的選擇模板因其數據更改而重新渲染,它將無濟於事。希望可以幫助...

1

解決辦法是:

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

通常情況下,重新渲染的確切程度並不重要,但如果你 想要更多的控制,比如性能原因,您可以使用 {{#isolate}} ... {{/ isolate}}助手。在#isolate塊內建立的數據依賴關係 被本地化爲塊,並且 本身不會導致父模板被重新呈現。該塊 幫手基本上表達了您將通過 將內容拉出到新的子模板中獲得的反應性好處。

如果你把{{foo}}{{#isolate}} ... {{/isolate}}然後父模板將不會被重新描繪,所以也{{> select}}不會受到影響。

+0

很酷,它工作!你知道爲什麼重新選擇多重選擇不起作用,因爲它使用正常的選擇。這可能是一個錯誤,或者這是預期的行爲? – lacco

+0

我將代碼提取到一個新的流星項目中,並在https://github.com/meteor/meteor/issues/1274上提交了一個錯誤。 – lacco

+0

Mh,我認爲'''{{#isolate}}''hack「在選擇模板也依賴於被動數據源時不起作用(例如類似''''''或者我錯過了什麼嗎? – lacco