在孩子准备好之前准备好聚合物3元素-如何迁移?

问题描述

polymer 1元素中,当冲压阴影dom并调用了阴影dom儿童的ready时,将调用ready。这意味着元素在递归准备就绪时就已经准备就绪。

在《聚合物3》中,“准备好”并没有说明影子dom孩子的准备情况。就元素可能来自具有不同生命周期约定的各种框架而言,这是有意义的。另一方面,在看似相同的方法上,行为发生了巨大变化,很容易就骗了你。

针对此更改,迁移现成代码方法有哪些?

解决方法

某些模式:

  • 不要依靠孩子准备和他们说话,而是使用绑定
    // before
    ready(){
      this.$.child1.setState(x)
    }
    // after
    <template>
      <my-child id="child1" state="[[stateForChild]]">
      ...
    
  • 等待与孩子交谈之前定义孩子
    ready(){
      customElements.whenDefined('my-child').then(()=>{
        this.$.child1.setState(x)
      })
    }
    
  • 针对孩子的事件采取行动
    // child
    this.dispatchEvent(new CustomEvent('i-am-ready'))
    // parent
    ready(){
      this.$.child1.addEventListener('i-am-ready',...)
    }