On 1/6/16, 6:35 PM, "Andy Dufilie" <[email protected]> wrote:
>button is null because document.createElement("button") is not an instance
>of MyButton.
Andy is right. We have not tried to extend the type system into the
built-in classes. Not sure we could guarantee that would work. More
below...
>Is this supposed to work?
>
>MyButton.as
>package {
>public class MyButton extends HTMLButtonElement {
>public function MyButton() {
>super();
>this.addEventListener("click", button_clickListener, false);
>}
>private function button_clickListener(event : MouseEvent) : void {
>alert("Hello World");
>}
>}
>}
>
>WebProject1.as
>package {
>public class WebProject1 {
Add the following as the ASDoc for the WebProject1() method, then it
should work:
/**
* @flexjsignorecoercion MyButton
*/
>public function WebProject1() {
>var button : MyButton = document.createElement("button") as MyButton;
>button.innerHTML = "Press Me";
>document.body.appendChild(button);
>}
>}
>}
I've pondered other ways to tell the compiler to not actually generate the
type-checking code since it doesn't actually get used at runtime by the
runtime. Lots of options here:
1) Extend the type system by adding FLEXJS_CLASS_INFO to existing classes
2) Use @flexjsignorecoercion
3) Automatically suppress type-checking code for all external definitions
4) Compiler options to suppress type-checking
Etc.
-Alex