From 970ce0762c3627443624f171505648ae3d30b281 Mon Sep 17 00:00:00 2001 From: Alex Graul Date: Sat, 29 Oct 2011 15:51:41 -0400 Subject: [PATCH 1/3] fix for wrapped errors inside success callbacks on save, issue #690 --- backbone.js | 3 ++- test/model.js | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/backbone.js b/backbone.js index a7dd4045..55c2c2be 100644 --- a/backbone.js +++ b/backbone.js @@ -1147,7 +1147,8 @@ // Wrap an optional error callback with a fallback error event. var wrapError = function(onError, model, options) { - return function(resp) { + return function(first, second) { + var resp = first === model ? second : first; if (onError) { onError(model, resp, options); } else { diff --git a/test/model.js b/test/model.js index 7ad0d71f..395b9f7d 100644 --- a/test/model.js +++ b/test/model.js @@ -267,6 +267,22 @@ $(document).ready(function() { model.set({lastName: 'Hicks'}); }); + test("Model: validate after save", function() { + var lastError, model = new Backbone.Model(); + model.validate = function(attrs) { + if (attrs.admin) return "Can't change admin status."; + }; + model.sync = function(method, model, options) { + options.success.call(this, {admin: true}); + }; + model.save(null, {error: function(model, error) { + console.log('erroring!'); + lastError = error; + }}); + + equals(lastError, "Can't change admin status."); + }); + test("Model: save", function() { doc.save({title : "Henry V"}); equals(lastRequest[0], 'update'); From 79eea1dc3c6680cd4f5a22ceed7facfbe2208180 Mon Sep 17 00:00:00 2001 From: Alex Graul Date: Sat, 29 Oct 2011 16:16:02 -0400 Subject: [PATCH 2/3] better method names --- backbone.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backbone.js b/backbone.js index 55c2c2be..0edcfca5 100644 --- a/backbone.js +++ b/backbone.js @@ -1147,8 +1147,8 @@ // Wrap an optional error callback with a fallback error event. var wrapError = function(onError, model, options) { - return function(first, second) { - var resp = first === model ? second : first; + return function(resp_or_model, possible_resp) { + var resp = resp_or_model === model ? possible_resp : resp_or_model; if (onError) { onError(model, resp, options); } else { From afc2d99b4632aca90f5c8d779541a0c655e621de Mon Sep 17 00:00:00 2001 From: Alex Graul Date: Sat, 29 Oct 2011 16:19:04 -0400 Subject: [PATCH 3/3] nicer again --- backbone.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backbone.js b/backbone.js index 0edcfca5..4dfa1ff8 100644 --- a/backbone.js +++ b/backbone.js @@ -1147,8 +1147,8 @@ // Wrap an optional error callback with a fallback error event. var wrapError = function(onError, model, options) { - return function(resp_or_model, possible_resp) { - var resp = resp_or_model === model ? possible_resp : resp_or_model; + return function(model, resp) { + var resp = model === model ? resp : model; if (onError) { onError(model, resp, options); } else {