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);
}
over 1 year ago
·
That's a good one @vraa! Thanks!
over 1 year ago
·
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Javascript
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#