Double clicking test and save won't retrigger button

Fixed: Double clicking test and save
pull/3113/head
Mark McDowall 9 years ago
parent cc6ab0ade1
commit 3c88f6c452

@ -6,33 +6,43 @@ module.exports = function() {
var saveInternal = function() { var saveInternal = function() {
var self = this; var self = this;
if (this.saving) {
return this.savePromise;
}
this.saving = true;
this.ui.indicator.show(); this.ui.indicator.show();
if (this._onBeforeSave) { if (this._onBeforeSave) {
this._onBeforeSave.call(this); this._onBeforeSave.call(this);
} }
var promise = this.model.save(); this.savePromise = this.model.save();
promise.always(function() { this.savePromise.always(function() {
self.saving = false;
if (!self.isClosed) { if (!self.isClosed) {
self.ui.indicator.hide(); self.ui.indicator.hide();
} }
}); });
promise.done(function() { this.savePromise.done(function() {
self.originalModelData = JSON.stringify(self.model.toJSON()); self.originalModelData = JSON.stringify(self.model.toJSON());
}); });
return promise; return this.savePromise;
}; };
this.prototype.initialize = function(options) { this.prototype.initialize = function(options) {
if (!this.model) { if (!this.model) {
throw 'View has no model'; throw 'View has no model';
} }
this.testing = false;
this.saving = false;
this.originalModelData = JSON.stringify(this.model.toJSON()); this.originalModelData = JSON.stringify(this.model.toJSON());
this.events = this.events || {}; this.events = this.events || {};
@ -50,7 +60,6 @@ module.exports = function() {
}; };
this.prototype._save = function() { this.prototype._save = function() {
var self = this; var self = this;
var promise = saveInternal.call(this); var promise = saveInternal.call(this);
@ -62,7 +71,6 @@ module.exports = function() {
}; };
this.prototype._saveAndAdd = function() { this.prototype._saveAndAdd = function() {
var self = this; var self = this;
var promise = saveInternal.call(this); var promise = saveInternal.call(this);
@ -76,9 +84,15 @@ module.exports = function() {
this.prototype._test = function() { this.prototype._test = function() {
var self = this; var self = this;
if (this.testing) {
return;
}
this.testing = true;
this.ui.indicator.show(); this.ui.indicator.show();
this.model.test().always(function() { this.model.test().always(function() {
self.testing = false;
self.ui.indicator.hide(); self.ui.indicator.hide();
}); });
}; };

Loading…
Cancel
Save