polymer - 使用纸张输入时,Polymer 3.0未捕获的DOM异常

标签 polymer polymer-3.x

使用paper-input时,导入将引发以下异常

Uncaught DOMException: Failed to execute 'define' on 'CustomElementRegistry': this name has already been used with this registry.



除了为3.0创建模板并添加导入之外,我没有做任何其他事情。

Google用来更新其旧组件的迁移工具似乎存在问题。

有人已经整理过了吗?

最佳答案

UPDATE 造成此问题的原因是iron-meta中有两种不同版本的node_modules:./node_modules/@polymer/iron-meta中的3.0.0-pre.18中的旧版本(已与Polymer Starter Kit一起安装),以及新版本(3.0.0-pre.19)作为新安装的@polymer/paper-input的依赖项。

该修复程序最近记录在Polymer Blog中-即删除package-lock.json并重新安装node_modules:

rm -rf node_modules package-lock.json
npm install

错误的堆栈跟踪(如下)似乎表明铁元元正以某种方式被注册两次:
polymer-fn.js:43 Uncaught (in promise) DOMException: Failed to execute 'define' on 'CustomElementRegistry': this name has already been used with this registry
    at Polymer (http://127.0.0.1:8081/node_modules/@polymer/polymer/lib/legacy/polymer-fn.js:43:18)
    at http://127.0.0.1:8081/node_modules/@polymer/iron-input/node_modules/@polymer/iron-meta/iron-meta.js:131:1

一种解决方法是将customElements.define修补为仅在尚未定义该元素的情况下运行:

const _customElementsDefine = window.customElements.define;
window.customElements.define = function(name, clazz, config) {
  if (!customElements.get(name)) {
    _customElementsDefine.call(window.customElements, name, clazz, config);
  }
};

在导入任何元素定义之前运行此命令。我确认此功能适用于macOS High Sierra Chrome 66上最新版本的paper-input

链接您创建的问题以供引用: PolymerElements/paper-input Issue #652

关于polymer - 使用纸张输入时,Polymer 3.0未捕获的DOM异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50355644/

相关文章:

javascript - 我可以将iron-localstorage 和iron-ajax 与highcharts 一起使用吗

javascript - 如何向 polymer 3 中的父组件通知数组突变

Javascript:将对象的对象转换为对象数组

polymer-3.x - 如何使用app-route在polymer 3中实现路由

polymer - 为非根路径构建 polymer 应用程序

css - 如何使用某些 mixin( polymer 2)设计纸张输入的样式?

javascript - 在 polymer 中使用本地 DOM 中的数据列表

javascript - 将函数作为参数传递给子组件 polymer 3

testing - Polymer 3.0 a11ySuite 测试报错

polymer - LitElement 缺乏与 Polymer 元素的兼容性