在Polymer 1.x中,我习惯于编写这样的模板化代码:
renderTemplate(query, properties) {
let element = this.shadowRoot.querySelector(query);
this.templatize(element);
var instance = this.stamp(properties);
return instance;
}
运作良好。但是在Polymer 2.x中有一条新的错误消息A <template> can only be templatized once
。嗯它没有意义,因为我有一个模板,我想用不同的属性多次重新分配。
我在这里举一个例子,说明我的代码是什么
我有#template1
和#template2
我想呈现#template1
然后#template2
然后#template1
。
我将如何渲染模板:
1)模板化#template1
2)邮票属性
3)模板化#template2
4)邮票属性
5 a)模板化#template1
=&gt; ERROR
5 b)跳过模板化和邮票属性=&gt;呈现#template2
....
我怎么能做到这一点?在呈现stamp()
后调用#template2
将导致另一个#template2
渲染。我想要#template1
,但我不能templatize #template1
,因为它已经被模板化了。并且stamp
始终被“绑定”以持续模仿元素。
我做错了吗?我真的很讨厌聚合物,因为它的文档很糟糕而且难以google一些有用的东西
答案 0 :(得分:0)
我发现了一种解决方法,它可能不是最佳解决方案,但它有效。我试图在源代码中搜索一些解决方案,但除了一个名为__templatizeOwner
的属性之外没有任何有用的东西。此属性设置为所有模板化元素。从元素中删除此属性就是这样。
renderTemplate(query, properties) {
let element = this.shadowRoot.querySelector(query);
if(element.__templatizeOwner) {
element.__templatizeOwner = null;
}
this.templatize(element);
var instance = this.stamp(properties);
return instance;
}
我不确定这可能带来什么副作用(更多的内存使用或其他东西),但这是我能够找到的唯一方法。