<script type="text/mustache" id="app-template">
<chat></chat>
</script>
<div id="my-app"></div>
<script src='http://agile-everglades-1937.herokuapp.com/socket.io/socket.io.js'></script>
var myServerUrl = "http://agile-everglades-1937.herokuapp.com";
// define our message model
var Message = can.Model({
findAll : 'GET ' + myServerUrl + '/messages',
create : function(attrs) {
$.post(myServerUrl + '/messages', attrs)
//keep '{Message} created' from firing twice
return $.Deferred()
}
},{});
can.Component.extend({
tag: 'chat',
template: '<ul id="messages">' +
'{{#each messages}}' +
'<li>{{body}}</li>' +
'{{/each}}' +
'</ul>' +
'<form id="create-message" action="" can-submit="submitMessage">' +
'<input type="text" id="body" placeholder="type message here..." can-value="newMessage" />' +
'</form>',
scope: {
Message: Message,
messages: new Message.List({}),
submitMessage: function(el, ev, ev2){
ev2.preventDefault();
new Message({body: this.attr("newMessage")}).save();
this.attr("newMessage", "");
}
},
events: {
'{Message} created': function(construct, ev, message){
this.scope.attr('messages').push(message);
}
}
});
var frag = can.view('app-template', {});
$('#my-app').html(frag);
// connect using Socket.io
var socket = io.connect(myServerUrl)
// listen for 'message-created' event to create a Message instance
// Note: the 'created' event IS triggered on this model instance.
socket.on('message-created', function(message){
new Message(message).created();
})