4

I have defined login element as follows:

<polymer-element name="my-login" extends="form">
  <template> ...</template>

and dart class as follows:

@CustomTag('my-login')
  class MyLogin extends PolymerElement { .... }

In the main application component, I am trying to create my-login as follows:

 MyLogin p =  new Element.tag("my-login", "FormElement");

This generates exception:

Exception: type 'HtmlElement' is not a subtype of type 'MyLogin' of 'p'.

The code works if "extends=form" is removed from polymer-element declaration :

 <polymer-element name="my-login">

and created as follows:

MyLogin p =  new Element.tag("my-login");

How to dynamically create custom element that extends other HTML element?

Günter Zöchbauer
  • 623,577
  • 216
  • 2,003
  • 1,567
Tusshu
  • 1,664
  • 3
  • 16
  • 32

2 Answers2

6

You should instantiate it as

Element y = new Element.tag('form', 'my-login');

What seems not to work is

MyLogin y = new Element.tag('form', 'my-login');

this should result in the HTML for the inserted element

<form is="my-login"></form>
Günter Zöchbauer
  • 623,577
  • 216
  • 2,003
  • 1,567
  • That's interesting. @zoechi Does attempting to access MyLogin's members throw exceptions? – Nestor Ledon Dec 10 '13 at 15:16
  • 1
    @Xerosigma I checked if the correct tag HTML was generated for the inserted element. I also couldn't properly access the properties of the object but I couldn't find the time yet to examine it properly. I guess this is a bug in Polymer.dart. – Günter Zöchbauer Dec 10 '13 at 15:19
  • wired, Element polyItem = new Element.tag("custom-project-button"); polyItem.project = k.toString(); does not work in mz new project, but it did work in my rainbow project – H.R. Jun 02 '14 at 17:43
  • What do you mean by `does not work`. Maybe you missed to import the element somewhere? – Günter Zöchbauer Jun 02 '14 at 20:27
3
factory MyLogin() => document.createElement("form", "my-login");

Then you can just call:

MyLogin login = new MyLogin();

This works for me.

Günter Zöchbauer
  • 623,577
  • 216
  • 2,003
  • 1,567
Azael
  • 614
  • 4
  • 16