Polymer 聚合物:如何根据属性替换标签名?

Polymer 聚合物:如何根据属性替换标签名?,polymer,Polymer,我有这样的模板 <template> <button class="y-button" id="el" disabled?="{{disabled !== undefined}}"> <span class="y-button__text"><content></content></span> </button> </template> 如何将标记名更改为另一个(

我有这样的模板

<template>
    <button class="y-button" id="el" disabled?="{{disabled !== undefined}}">
        <span class="y-button__text"><content></content></span>
    </button>
</template>

如何将标记名更改为另一个(例如
)取决于某些属性,例如。

我试过了

<template>
  <{{tagName}}></{{tagName}}>
</template>


但它不起作用。

数据绑定无法做到这一点。绑定表达式仅允许在标记的文本内容或属性值中使用:

您也不能使用数据绑定插入整个标记,因为数据绑定表达式的内容在插入之前是HTML转义的。见:

不能使用表达式插入HTML。为避免XSS问题,表达式的输出在作为绑定值插入之前会进行HTML转义

如果只有两个可能的标记,则可以使用条件模板语法:

<template if="{{condition}}">
  <tagOne></tagOne>
</template>
<template if="{{! condition}}">
  <tagTwo></tagTwo>
</template>

对于更复杂的情况,您可能希望按照@skmvasu的建议使用JavaScript和innerHTML。如果需要在插入的HTML中激活数据绑定,可以使用injectBoundHTML方法:


您可以使用
injectBoundHTML

var tag = 'x-el';
var html = '<' + tag + ' item="{{item}}"></' + tag + '>';
this.injectBoundHTML(html, this.$.container);
var标签='x-el';
var html='';
this.injectBoundHTML(html,this.$.container);

{{item.name}
聚合物({
就绪:函数(){
this.item={name:'John Smith'};
变量标签='x-el';
var html='';
this.injectBoundHTML(html,this.$.container);
}
});

我不太明白你的问题。您是否正在尝试基于模型动态创建元素?如果是这样,您可以简单地使用元素的javascript来处理它。让我知道更多的细节,这样我可以更好地帮助你们。我在模板中有一个大的声明标记:按钮几个处理程序,带有数据绑定的类。现在,我需要通过保存处理程序和类来动态更改标记名,使其依赖于属性url。