Templatizer - 如何渲染多次相同的模板,Polymer 2.x.

时间:2018-04-09 12:23:19

标签: polymer polymer-2.x

在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一些有用的东西

1 个答案:

答案 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;
}

我不确定这可能带来什么副作用(更多的内存使用或其他东西),但这是我能够找到的唯一方法。