var Backgrid = require('backgrid'); module.exports = Backgrid.Cell.extend({ className : 'download-report-cell', events : { 'click' : '_onClick' }, _onClick : function() { if (!this.model.get('downloadAllowed')) { return; } var self = this; this.$el.html(''); //Using success callback instead of promise so it //gets called before the sync event is triggered var promise = this.model.save(null, { success : function() { self.model.set('queued', true); } }); promise.fail(function (xhr) { if (xhr.responseJSON && xhr.responseJSON.message) { self.$el.html(''.format(xhr.responseJSON.message)); } else { self.$el.html(''); } }); }, render : function() { this.$el.empty(); if (this.model.get('queued')) { this.$el.html(''); } else if (this.model.get('downloadAllowed')) { this.$el.html(''); } else { this.className = 'no-download-report-cell'; } return this; } });