Polymer 聚合-将内容标记嵌套在条件模板中

Polymer 聚合-将内容标记嵌套在条件模板中,polymer,polymer-1.0,Polymer,Polymer 1.0,我使用条件模板分发传递到元素中的内容。如果条件为true,它将显示第一个内容元素,否则显示第二个内容元素。我注意到,当我更新条件时,已经分发的内容没有更新。一旦它是可见的,它将保持可见。 我的第一次尝试是这样的: <template is="dom-if" if="{{test}}"> <content select=".first"> </content> </template> <template is="dom-if"

我使用条件模板分发传递到元素中的内容。如果条件为true,它将显示第一个内容元素,否则显示第二个内容元素。我注意到,当我更新条件时,已经分发的内容没有更新。一旦它是可见的,它将保持可见。 我的第一次尝试是这样的:

<template is="dom-if" if="{{test}}">
    <content select=".first">
    </content>
</template>
<template is="dom-if" if="{{!test}}">
    <content select=".second">
    </content>
</template>

我注意到,如果内容被包装在另一个元素中,它将起作用

<template is="dom-if" if="{{test}}">
    <div>
        <content select=".first">
        </content>
    </div>
</template>
<template is="dom-if" if="{{!test}}">
    <div>
        <content select=".second">
        </content>
    </div>
</template>

我已经创建了一个示例来演示这两种情况。
这种行为有什么解释吗?这是故意的还是错误?

这实际上是每种设计。下面是聚合物团队在Github上的发言

隐藏
不会影响其分布式子级的可见性(根据规范),因此您可以选择使用可隐藏的包装器元素包装内容(并将隐藏分布式子级),或者使用
重新映射
,将
一起从DOM中拉出。 restamp和non-restamp设置的工作方式有所不同,这有点不直观,但是这是由于non-restamp行为隐藏而不是破坏DOM作为性能优化的结果


您是否尝试过dom if的
restamp
属性?这一点很好。我没有,但我只是尝试了一下,它会起作用。尽管如此,我还是有点困惑为什么第一种方法适用于本地dom,但如果我使用分布式内容就不行。我相信这是一个bug,你应该报告它。我还发现了另一件事:您将test的初始值设置为true,但仍然没有任何内容不可见。我通过添加一个ready函数来测试您的示例,在这里我将测试设置为true(test=true;),现在第一个内容如预期所示。然而,这并不能消除最初的失败。@grohjy我刚刚报告了它,基本上没有效果。但是重新编译是有效的,因为它会从dom内部删除整个内容。隐藏自身和其中的所有内容,这就是包装器元素工作的原因。现在很容易理解这种行为。