Skip to content

Instantly share code, notes, and snippets.

@krusty
Created July 16, 2012 18:51
Show Gist options
  • Save krusty/3124313 to your computer and use it in GitHub Desktop.
Save krusty/3124313 to your computer and use it in GitHub Desktop.
var smb = {
parse: function (response) {
if (response.error_text) {
var ErrorMessage = smb.module('error_message');
var error_message = new ErrorMessage.Views.Flash({
message: response.error_text
});
}
if (typeof this.extra_parse === "function") {
return this.extra_parse(response);
}
if (response.data) {
return response.data;
}
return response;
},
flash_error: function (response) {
var message = 'There was a problem connecting to the server, ' +
'please try again';
if (response.readyState === 4 &&
JSON.parse(response.responseText).error_text) {
message = JSON.parse(response.responseText).error_text;
}
var ErrorMessage = smb.module('error_message');
var error_message = new ErrorMessage.Views.Flash({
message: message
});
},
wrap_callbacks: function (that, options) {
var new_options = _.clone(options) || {};
new_options.success = function (object, response) {
if (options && typeof options.success === "function") {
options.success.call(object, response);
}
};
new_options.error = function (object, response) {
if (options && typeof options.error === "function") {
options.error.call(object, response);
}
smb.flash_error(response);
};
return new_options;
}
};
smb = _.extend(smb, {
Model: Backbone.Model.extend({
fetch: function (options) {
this.trigger('fetching');
Backbone.Model.prototype.fetch.call(
this,
smb.wrap_callbacks(this, options)
);
},
parse: smb.parse
}),
Collection: Backbone.Collection.extend({
fetch: function (options) {
this.trigger('fetching');
Backbone.Collection.prototype.fetch.call(
this,
smb.wrap_callbacks(this, options)
);
},
parse: smb.parse
}),
});
// Error Messages
// --------------
(function (ErrorMessage) {
ErrorMessage.Views.Flash = Backbone.View.extend({
initialize: function () {
this.$el = $('#flash-container');
this.template = _.template($('#error-message-template').html());
this.render();
},
render: function () {
this.$el.html(this.template({message: this.options.message}));
}
});
}(smb.module('error_message')));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment