can
Version:
MIT-licensed, client-side, JavaScript framework that makes building rich web applications easy.
58 lines (54 loc) • 1.69 kB
JavaScript
import { Component, DefineMap, stache } from "can";
import "can/demos/technology-overview/component-slider";
Component.extend({
tag: "task-editor",
view: stache(`
{{
<h1><code><task-editor></code></h1>
<p>
This content is provided by the <code><task-editor></code> component.
Click <a href="{{ routeUrl(page='home') }}">Home</a> to return to the homepage, or
<button on:click='logout()'>Logout</button> to log out. Edit the task below:
</p>
{{/ else }}
<h2>Task Editor</h2>
{{/ if }}
<form on:submit='save(scope.event)'>
Name: {{ name }}
<p>
<input value:bind='name'/>
</p>
Progress: {{ progress }}
<p>
<percent-slider value:bind='progress'/>
</p>
<button disabled:from="isSaving">
{{
</button>
</form>
`),
ViewModel: DefineMap.extend({
id: "number",
name: {
default: function(){
return "Task "+this.id;
}
},
progress: {
// makes progress an integer
type(num){
return parseInt(num);
},
default: 0
},
isSaving: {default: false},
save(event){
event.preventDefault();
this.isSaving = true;
// fake ajax request
setTimeout(() => {
this.isSaving = false;
},2000);
}
})
});