diff --git a/backbone.js b/backbone.js index 834ed2f2..a066a355 100644 --- a/backbone.js +++ b/backbone.js @@ -397,24 +397,24 @@ var model = this; var success = options.success; - var triggerDestroy = function() { + var destroy = function() { model.trigger('destroy', model, model.collection, options); }; + options.success = function(resp) { + if (options.wait || model.isNew()) destroy(); + if (success) success(model, resp, options); + if (!model.isNew()) model.trigger('sync', model, resp, options); + }; + if (this.isNew()) { - triggerDestroy(); + options.success(); return false; } - options.success = function(resp) { - if (options.wait) triggerDestroy(); - if (success) success(model, resp, options); - model.trigger('sync', model, resp, options); - }; - options.error = Backbone.wrapError(options.error, model, options); var xhr = this.sync('delete', this, options); - if (!options.wait) triggerDestroy(); + if (!options.wait) destroy(); return xhr; }, diff --git a/test/model.js b/test/model.js index a23d732e..9021b9d2 100644 --- a/test/model.js +++ b/test/model.js @@ -840,4 +840,11 @@ $(document).ready(function() { model.destroy(); }); + test("#1365 - Destroy: New models execute success callback.", 2, function() { + new Backbone.Model() + .on('sync', function() { ok(false); }) + .on('destroy', function(){ ok(true); }) + .destroy({ success: function(){ ok(true); }}); + }); + });