can
Version:
MIT-licensed, client-side, JavaScript framework that makes building rich web applications easy.
64 lines (58 loc) • 1.54 kB
HTML
<style type="text/css">
ul {
padding: 0;
}
li {
margin: 5px 0;
border: solid 1px lightgray;
padding: 3px 10px;
}
li span {
font-size: small;
color: gray;
display: block;
}
</style>
<div id="demo-html">
<div id="out"></div>
<script id="app" type="text/stache">
<input type="text" {($value)}="newMessage" />
<button ($click)="send()">Send</button>
<ul>
{{#each messages}}
<li>{{text}} <span>sent on {{date}}</span></li>
{{/each}}
</ul>
</script>
</div>
<script src="../../node_modules/steal/steal.js" main="@empty" id="demo-source">
var stache = require("can-stache");
require("can-stache-bindings");
var DefineMap = require("can-define/map/map");
var DefineList = require("can-define/list/list");
var io = require("socket.io-client");
var fixtureSocket = require("can-fixture-socket");
// Mock socket.io server:
var mockServer = new fixtureSocket.Server(io);
mockServer.on("new message", function(message){
message.date = new Date();
mockServer.emit("message created", message);
});
// Client application:
var socket = io("localhost");
var viewModel = new DefineMap({
newMessage: "",
messages: new DefineList([]),
send: function(){
socket.emit("new message", {text: this.newMessage});
this.newMessage = "";
}
});
socket.on("message created", function(message){
viewModel.messages.unshift(message);
});
// Render application:
var template = document.getElementById("app").innerHTML;
var frag = stache(template)(viewModel);
document.getElementById("out").appendChild(frag);
</script>