Javascript 在Polymer 2.0中动态附加加载的子元素

Javascript 在Polymer 2.0中动态附加加载的子元素,javascript,polymer,polymer-2.x,Javascript,Polymer,Polymer 2.x,我正在尝试升级到Polymer 2.0,但我似乎无法像在1.X中那样在父元素的负载上附加子元素。以前,我想我只是使用了ready回调,但似乎所有回调都已更改 如回拨合约已更改部分所示 我试过跑步 document.getElementById("parent-element").appendChild(document.createElement("child-element")); 在ready和attached上,它似乎在创建父元素之前执行该行。这会导致一个异常: TypeError: C

我正在尝试升级到Polymer 2.0,但我似乎无法像在1.X中那样在父元素的负载上附加子元素。以前,我想我只是使用了
ready
回调,但似乎所有回调都已更改

回拨合约已更改部分所示

我试过跑步

document.getElementById("parent-element").appendChild(document.createElement("child-element"));
ready
attached
上,它似乎在创建
父元素之前执行该行。这会导致一个异常:

TypeError: Cannot read property 'appendChild' of null
我也试过使用

this.$.container.appendChild(document.createElement("child-element"));
其中,
container
是父元素中一个空
id
,但我得到了相同的问题。我对聚合物非常陌生,所以如果有更好的方法或结构可以用来获得我需要的东西,请告诉我。

来自1.x->2.x:

  • 对于标准DOM操作,请删除Polymer.DOM()包装器
  • 使用this.shadowRoot代替Polymer.dom(this.root)
由于webcomponents v1规范的原因,
ready()
回调现在是异步的(微任务)。要缓解这一问题,请使用
settimeout
,它是浏览器级别的另一个任务,在微任务之后运行

如果你想深入研究任务和微任务

ready() {
  super.ready();
  setTimeout(function() {
    var distributedNodes = this.$.slot.assignedNodes({flatten: true});
    console.log(distributedNodes);
  }.bind(this), 0);
}