omi-binding
Version:
a model binding module
128 lines (122 loc) • 3.19 kB
JSX
import { render, h, define, Component } from "omi/src/omi";
import "../src/index.js";
render(
<fieldset>
<legend>binding location</legend>
<input o-model="location.href" style="width:50rem;"></input>
</fieldset>,
"body"
);
define(
"app-main",
class extends Component {
static css = `
div{
line-height: 1.5;
margin: .6rem;
}
div span{
display:inline-block;
margin-right:.2rem;
width:10rem;
}
button{
padding:.5rem;
margin:.3rem;
}
`;
data = {
name: "lv-saharan",
gender: "male",
likes: ["tv", "music", "reading"],
get likesCount() {
return this.likes.length;
},
some: {
prop1: 123,
prop2: true,
},
};
//指定绑定的范围
get bindingScope() {
return this.data;
}
showLikes = true;
render() {
return (
<fieldset>
<legend>form binding</legend>
<div>
<span>name:</span>
<input o-model="name" style="width:50rem;" input-pattern="^\D+$"></input>
</div>
<div>
<span>gender:</span>
<input
o-model="gender"
type="radio"
value="male"
name="gender"
></input>
male
<input
o-model="gender"
type="radio"
value="female"
name="gender"
></input>
female
</div>
<div>
<span>likes:</span>
{["tv", "game", "reading", "music", "others"].map((l) => (
<label>
<input
o-model="likes"
type="checkbox"
value={l}
onChange={(evt) => {
updateBindings();
}}
></input>
{l}
</label>
))}
</div>
<div>
<span>likes count</span>
<select o-model="likesCount" disabled>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</div>
<div>
<span>some</span>
prop1:<input type="number" o-model="some.prop1"></input> prop2:
<input type="checkbox" o-model="some.prop2"></input>
prop3: <input type="checkbox" o-model="some.prop3" o-true-value="Y" o-false-value="N"></input>
</div>
<button
onClick={(evt) => {
this.data.name = "sa";
this.updateBindings();
}}
>
set name to sa and updateBindings
</button>
<button
onClick={(evt) => {
alert(JSON.stringify(this.data));
}}
>
show data
</button>
</fieldset>
);
}
}
);
render(<app-main />, "body");