can
Version:
MIT-licensed, client-side, JavaScript framework that makes building rich web applications easy.
69 lines (58 loc) • 1.78 kB
HTML
<my-demo></my-demo>
<script src="../../node_modules/steal/steal.js" dev-bundle main="@empty" id='demo-source'>
import { StacheElement, type } from "can";
class MyDrivers extends StacheElement {
static get view() {
return `
<ul>
{{
<li on:click="this.select(driver)">
{{ driver.title }} {{ driver.first }} {{ driver.last }} - {{ driver.licensePlate }}
</li>
{{/ for }}
</ul>
`;
}
static get props() {
return {
drivers: {
get default() {
return [
{ title: "Dr.", first: "Cosmo", last: "Kramer", licensePlate: "543210" },
{ title: "Ms.", first: "Elaine", last: "Benes", licensePlate: "621433" }
];
}
},
selected: type.Any
};
}
select(driver) {
this.selected = driver;
}
};
customElements.define("my-drivers", MyDrivers);
class EditPlate extends StacheElement {
static get view() {
return `<input value:from='this.plateName' on:input='this.update(scope.element.value)'/>`;
}
static get props() {
return {
plateName: type.maybeConvert(String)
};
}
update(value) {
this.plateName = value;
}
};
customElements.define("edit-plate", EditPlate);
class MyDemo extends StacheElement {
static get view() {
return `
{{ let editing=null }}
<my-drivers selected:to="editing"/>
<edit-plate plateName:bind="editing.licensePlate"/>
`;
}
};
customElements.define("my-demo", MyDemo);
</script>