【问题标题】:How to Globally Scope a Polymer 1.x Polymer Web Component如何在全局范围内设置 Polymer 1.x Polymer Web 组件
【发布时间】:2017-09-24 00:44:23
【问题描述】:

如果我在 Polymer 中有一个自定义 Web 组件,是否可以将模板的范围设置为(index.html 的)主 DOM 的一部分而不是在阴影中?

我正在尝试挂钩由脚本激活的输入,但脚本无法看到影子 DOM。

<link rel="import" href="../../bower_components/polymer/polymer.html">

<dom-module id="custom-element">

<template>

  // Code to be scoped for index.html

  <div id="script-selects-this-id-and-converts-div-to-input"></div>

</template>

  <script>

    Polymer({

      is: 'custom-element'

    });

  </script>

</dom-module>

【问题讨论】:

    标签: dom polymer polymer-1.0 shadow-dom


    【解决方案1】:

    好吧,你当然可以指向窗口对象。这可能不是 shadow dom 应该如何工作的方式,但是如果您有一些可以控制的库,那么这可能是唯一的解决方案。 所以在自定义元素脚本中,您可以执行以下操作:

    ready: function() {
      window.reference = this;
    }
    

    如果你尝试console.log(window.reference),你会看到整个自定义元素

    【讨论】:

    • 当我console.log(window.reference) 时,该元素确实填充到了开发工具中,尽管该元素本身仍然有一个脚本无法找到的#shadow-root。是否可以做类似window.reference = this.shadowRoot 的事情?
    • 我似乎正在接近this.shadowRoot.innerHTML 选择器。
    • 如果你使用this.shadowRoot,你会得到html,你可以在其中调用.querySelectorgetElementById等等,所以我不知道问题出在哪里。问题是,您的图书馆在做什么,或者它如何找到元素
    • 我尝试在index.html 中创建一个节点并使用getElementById 附加,但在使用appendChild 时出现控制台错误。我能够使用var square = this.shadowRoot.innerHTML; var node = document.querySelector('footer'); node.innerHTML += square; this.build; 将表单附加到DOM。但是,当使用此策略时,表单会附加到页脚,格式化的所有希望似乎都消失了。
    • 搜索 DOM 树的脚本来自 Square。可以在此处找到有关此问题的更多详细信息:stackoverflow.com/questions/43620053/…
    猜你喜欢
    • 2010-10-21
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多