Backbone.js Hello World example
I wanted to create sample app similar to Viral Patel's Angular H"Hello World" example: http://jsfiddle.net/viralpatel/nZ5sH/
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/2.0.0/handlebars.min.js"></script>
<div id="app">
<p>Write some text in the box: <input class="greeting-input" type="text" /></p>
<div class="greeting-output"></div>
</div>
<script type="text/x-handlebars-template" id="greeting-template">
<h1>Hello {{text}}</h1>
<h4>Uppercase: {{uppercaseText}}</h4>
<h4>Lowercase: {{lowercaseText}}</h4>
</script>
CSS
h1, h4 {
margin: 20px 0 0 0;
padding: 0;
}
JavaScript
// Our model
var Greeting = Backbone.Model.extend({ defaults: { text: ''} });
var greeting = new Greeting();
// Our view
var GreetingView = Backbone.View.extend({
events: {
'keyup .greeting-input': 'editText',
'keydown .greeting-input': 'editText',
},
el: document.getElementById('app'),
template: Handlebars.compile($('#greeting-template').html()),
initialize: function() {
this.input = this.$el.find('.greeting-input');
this.output = this.$el.find('.greeting-output');
this.listenTo(this.model, 'change', this.render);
},
render: function() {
var text = this.model.get('text')
var templateData = {
text: text,
uppercaseText: text.toUpperCase(),
lowercaseText: text.toLowerCase()
};
this.output.html(this.template(templateData));
return this;
},
editText: function(e) {
// For smooth effect we'll use 'keyup' to grab text, but 'keydown' for Delete & Backspace
if (((e.which === 8 || e.which === 46) && e.type === 'keydown') || (e.type === 'keyup')) {
this.model.set('text', this.input.val().trim());
}
}
});
var greetingView = new GreetingView({ model: greeting });
greetingView.render();