68 lines
1.7 KiB
JavaScript
68 lines
1.7 KiB
JavaScript
app.views.Base = Backbone.View.extend({
|
|
|
|
initialize : function(options) {
|
|
this.setupRenderEvents();
|
|
},
|
|
|
|
presenter : function(){
|
|
return this.defaultPresenter()
|
|
},
|
|
|
|
setupRenderEvents : function(){
|
|
if(this.model) {
|
|
//this should be in streamobjects view
|
|
this.model.bind('remove', this.remove, this);
|
|
}
|
|
|
|
// this line is too generic. we usually only want to re-render on
|
|
// feedback changes as the post content, author, and time do not change.
|
|
//
|
|
// this.model.bind('change', this.render, this);
|
|
},
|
|
|
|
defaultPresenter : function(){
|
|
var modelJson = this.model ? _.clone(this.model.attributes) : {}
|
|
return _.extend(modelJson, {
|
|
current_user : app.currentUser.attributes,
|
|
loggedIn : app.currentUser.authenticated()
|
|
});
|
|
},
|
|
|
|
render : function() {
|
|
this.renderTemplate()
|
|
this.renderSubviews()
|
|
this.renderPluginWidgets()
|
|
this.removeTooltips()
|
|
|
|
return this
|
|
},
|
|
|
|
renderTemplate : function(){
|
|
var presenter = _.isFunction(this.presenter) ? this.presenter() : this.presenter
|
|
this.template = JST[this.templateName]
|
|
$(this.el).html(this.template(presenter));
|
|
this.postRenderTemplate();
|
|
},
|
|
|
|
postRenderTemplate : $.noop, //hella callbax yo
|
|
|
|
renderSubviews : function(){
|
|
var self = this;
|
|
_.each(this.subviews, function(property, selector){
|
|
var view = _.isFunction(self[property]) ? self[property]() : self[property]
|
|
if(view) {
|
|
self.$(selector).html(view.render().el)
|
|
view.delegateEvents();
|
|
}
|
|
})
|
|
},
|
|
|
|
renderPluginWidgets : function() {
|
|
this.$(this.tooltipSelector).twipsy();
|
|
this.$("time").timeago();
|
|
},
|
|
|
|
removeTooltips : function() {
|
|
$(".twipsy").remove();
|
|
}
|
|
});
|