BB Skeleton

by kyllle

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-alpha1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.2.2/backbone-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.5/handlebars.min.js"></script>
<div class="js-app"></div>

<script type="text/x-handlebars-template" class="tmpl-view">
	<h1>View</h1>
    <p>{{id}}</p>
    <p>{{name}}</p>
</script>

SCSS

* {
  -webkit-font-smoothing: antialiased;
}

body {
    padding: 5%;
}

.view {
    background: white;
    padding: 5px;
    border: 1px solid #eee;
}

JavaScript

console.clear();

function outputData(id, name) {
	return {
    	id: id,
        name: name
    }
};

var View = Backbone.View.extend({

	className: 'view',
	
	template: Handlebars.compile( $('.tmpl-view').html() ),
    
    initialize: function() {
		this.listenTo(Backbone.Events, 'data:recieved', function(response) {
        	// Check if this model data is related to this view then set?
        	this.model.set(response);
            this.render();
        }.bind(this), this)
    },
    
    render: function() {
    	this.$el.html(this.template(this.model.toJSON()));
        return this;
    }
});

var viewOne = new View({
	model: new Backbone.Model()
});

var viewTwo = new View({
	model: new Backbone.Model()
});

$('body').append(
	viewOne.render().el,
    viewTwo.render().el
);

Backbone.Events.trigger('data:recieved', outputData(1, 'Data for viewOne'));

setTimeout(function() {
	Backbone.Events.trigger('data:recieved', outputData(2, 'Data for viewTwo'));
}, 400)