MyWidget.tsx
55 lines
| 1.4 KiB
| text/x-typescript
|
TypeScriptLexer
cin
|
r65 | import { djbase, djclass, bind, prototype, AbstractConstructor } from "../declare"; | ||
import { DjxWidgetBase } from "../tsx/DjxWidgetBase"; | ||||
import { createElement } from "../tsx"; | ||||
interface MyWidgetAttrs { | ||||
title: string; | ||||
counter: number; | ||||
} | ||||
interface MyWidgetEvents { | ||||
cin
|
r71 | "count-inc": Event & { | ||
detail: number; | ||||
}; | ||||
cin
|
r65 | |||
cin
|
r71 | "count-dec": Event & { | ||
detail: number; | ||||
}; | ||||
cin
|
r65 | } | ||
@djclass | ||||
export class MyWidget extends djbase(DjxWidgetBase as AbstractConstructor<DjxWidgetBase<MyWidgetAttrs, MyWidgetEvents>>) { | ||||
@bind({ node: "titleNode", type: "innerHTML" }) | ||||
title = ""; | ||||
@prototype() | ||||
counter = 0; | ||||
render() { | ||||
const Frame = (props: any) => <div>{props.children}</div>; | ||||
return <div className="myWidget" onsubmit={e => this._onSubmit(e)} tabIndex={3} style={{ alignContent: "center", border: "1px solid" }} > | ||||
<h1 data-dojo-attach-point="titleNode"></h1> | ||||
<Frame> | ||||
<span class="up-button" onclick={e => this._onIncClick(e)}>[+]</span> | ||||
<span class="down-button" onclick={() => this._onDecClick()}>[-]</span> | ||||
</Frame> | ||||
</div>; | ||||
} | ||||
_onSubmit(e: Event) { | ||||
} | ||||
_onIncClick(e: MouseEvent) { | ||||
cin
|
r71 | this.set("counter", this.counter+1); | ||
cin
|
r65 | this.emit("count-inc", { bubbles: false }); | ||
} | ||||
_onDecClick() { | ||||
cin
|
r71 | this.emit("count-dec", { bubbles: false, detail: this.counter }); | ||
cin
|
r65 | } | ||
} | ||||