Can't Use Polymer Element - “Failed to execute 'registerElement' on 'Document'”

北城余情 提交于 2020-01-01 05:15:07

问题


I created an element which which I'll simplify here for brevity, and I wanted to do an end-to-end process and see if it works.

This is its bower.json file:

{
  "name": "test-element",
  "version": "0.0.1",
  "authors": [
    "my name"
  ],
  "description": "A description",
  "license": "MIT",
  "ignore": [
    "**/.*",
    "node_modules",
    "bower_components",
    "test",
    "tests"
  ],
  "dependencies": {
    "polymer": "~0.9.0"
  }
}

I uploaded it to my test repo, and opened a new project in WebStorm.

I did bower install test-element and it also downloaded the polymer directory which is the dependency, as I wanted, though there are no js files there. (Shouldn't there be a polymer.js file to reference?)

Now, my index file that loads has this in the body:

    <script src="bower_components/webcomponentsjs/webcomponents.js"></script>
    <link rel="import" href="bower_components/test-element/test-element.html">

    <test-element
        elements="[...array contents...]">
    </test-element>

And my test-element.html:

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


<polymer-element name="test-element" ....> 
    <template>
          ... doesn't really matter ...
    </template>
    <script>
        Polymer({
            created: function () { .. }
        });
    </script>
</polymer-element>

But when I load the page I see this in the console:

Uncaught SyntaxError: Failed to execute 'registerElement' on 'Document': Registration failed for type 'undefined'. The type name is invalid.

I tried many posts, and I can't see what I'm missing here. I'm loading the webcomponents.js before importing the element's HTML file.

So 2 questions:

  1. Why does this error occur and what did I do wrong? Am I missing the polymer.js ? If so, why didn't it download as part of the dependency ?
  2. If I have many elements, do I need to include the polymer.html in each of them or can I just load it once in the index.html file?

回答1:


  1. You are mixing polymer 0.5 with 0.9. A lot has changed in Polymer 0.9. Eg., polymer-element has been replaced with dom-module. Migration Guide.

Before:

<polymer-element name="register-me">
  <template>
    <div>Hello from my local DOM</div>
  </template>
  <script>
    Polymer();
  </script>
</polymer-element>

After:

<dom-module id="register-me">
  <template>
    <div>Hello from my local DOM</div>
  </template>
</dom-module>

<script>
  Polymer({is: "register-me"});
</script>
  1. You are seeing this error

Uncaught SyntaxError: Failed to execute 'registerElement' on 'Document': Registration failed for type 'undefined'. The type name is invalid.

because you are using polymer core elements that are compatible with Polymer 0.5 with Polymer 0.9. Along with polymer 0.9 the polymer elements are also upgraded. Follow this post to install the new elements.

Note: The core-elements are scrapped in polymer 0.9 and replaced with iron elements.

  1. To properly install Polymer 0.9 include these lines in your bower.json

    "dependencies": { "polymer": "Polymer/polymer#^0.9.0" }

and use this terminal command $ bower install



来源:https://stackoverflow.com/questions/30379021/cant-use-polymer-element-failed-to-execute-registerelement-on-document

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!