覆盖 createRenderRoot 后如何访问 lit-element 渲染根?

How do you access a lit-element render root after overriding createRenderRoot?

我一直在玩 lit-element,我想将我的自定义元素获取到 运行 getElementById。我能找到的唯一示例使用影子根(因为这是使用 lit-element 的推荐方式)。如何访问您的自定义元素以 运行 仅针对您的元素进行查询?

import { LitElement, html } 
from 'https://unpkg.com/lit-element/lit-element.js?module';

class RenderRootTest extends LitElement {
  constructor() {
    super();
  }
  render () {
    const renderRoot = this.shadowRoot; //Won't work, because I'm overriding the shadowroot
    return html`
      <div>Rendered</div>
      ${renderRoot ? 
        html`<div>Render root found</div>` :
        html``
      }
    `;
  }
  createRenderRoot() {
    return this;
  }
}

customElements.define('render-root-test', RenderRootTest);

经过足够的修补,我自己找到了答案。您可以使用 this.renderRoot 或仅使用 this。但是,请注意某些方法,例如 .getElementById 似乎并不存在。如果有人对此主题有任何其他详细信息,我将不胜感激。

例如

import { LitElement, html } 
from 'https://unpkg.com/lit-element/lit-element.js?module';

class RenderRootTest extends LitElement {
  constructor() {
    super();
  }
  render () {
    const renderRoot = this.renderRoot;
    return html`
      <div>Rendered</div>
      ${renderRoot ? 
        html`<div>Render root found</div>` :
        html``
      }
    `;
  }
  createRenderRoot() {
    return this;
  }
}

customElements.define('render-root-test', RenderRootTest);

只需引用 this 即可,这是自定义元素的实例。 shadowRoot 由 LitElement 的 createRenderRoot() 创建并 return 编辑,因此如果您不创建一个而不是 this.shadowRoot return this--这是节点本身——这是内容被渲染到的地方,没有 shadowRoot。