Extend your Backbone View with some helpful methods
I've been working with Backbone.js for a couple of months now and after creating loads of different Views you realize that you are writing the same piece of functionality over and over again.
To avoid that you can just extend your Backbone View with those methods and call them later. Here are some of the ones that I use:
Render only a piece of the template
Backbone.View.prototype.renderElement = function (selector, data) {
var html = $('<div>').html(this.template(_.extend({}, this.model.toJSON(), data)));
this.$el.find(selector).replaceWith($(selector, html));
return this;
}
Scroll to an element
Backbone.View.prototype.scrollToElement = function (selector, time, verticalOffset) {
var time = typeof(time) != 'undefined' ? time : 200,
verticalOffset = typeof(verticalOffset) != 'undefined' ? verticalOffset : 0,
element = $(selector),
offset = element.offset(),
offsetTop = offset.top + verticalOffset;
$('html, body').animate({ scrollTop: offsetTop }, time);
}
Display a loading overlay on top of the view
Backbone.View.prototype.renderLoading = function(){
var loadingHtml = '<div class="loading">'
+ '<div class="loading-overlay"></div>'
+ '<div class="loading-icon"></div>'
+ '</div>';
this.$el.append(loadingHtml);
}
And this is an example on how to use them:
var PageView = Backbone.View.extend({
initialize: function(options){
this.model.on({
'request': this.renderLoading,
'sync': this.updateElement
}, this);
},
updateElement: function(){
this.renderElement('.element');
this.scrollToElement('.element');
}
// some methods to do stuff with the model
});Written by Tarmann
Related protips
2 Responses
I always have this one defined in my base backbone views to avoid memory leak.
Reference: http://stackoverflow.com/a/11534056
destroy_view: function() {
//COMPLETELY UNBIND THE VIEW
this.undelegateEvents();
this.$el.removeData().unbind();
//Remove view from DOM
this.remove();
Backbone.View.prototype.remove.call(this);
}That's a good one @vraa! Thanks!
Have a fresh tip? Share with Coderwall community!
JavaScript on a page runs with the privileges of that origin. One altered library, tag manager, or snippet can read inputs, change what people see, and call your APIs as the user.
Security insights from Cside