I think the interesting part of your question is how to refactor without losing access to the closure variables. Here is my suggestion:
Version one: nested, with closing and access to the variable:
var a; $('a.edit').click( function() { var b; $.ajax({ success: function() { var c; $(new_form).submit(function() { var d; $.ajax({ success: function(data) {
The second version: less nested, but without closing and without accessing variables:
var a; $('a.edit').click(onEdit); var onEdit = function() { var b; $.ajax({success: onEditSuccess}); }; var onEditSuccess = function() { var c; $(new_form).submit(onSubmit); }; var onSubmit = function() { var d; $.ajax({success: onSubmitSuccess}); } var onSubmitSuccess = function(data) {
Version three: fewer nested and with unnamed functions and parameters to gain access to closing variables:
var a; $('a.edit').click(function(){onEdit(a)}); var onEdit = function(a) { var b; $.ajax({success: function(){onEditSuccess(a,b)}}); }; var onEditSuccess = function(a,b) { var c; $(new_form).submit(function(){onSubmit(a,b,c)}); }; var onSubmit = function(a,b,c) { var d; $.ajax({success: function(data){onSubmitSuccess(data,a,b,c,d)}}); } var onSubmitSuccess = function(data,a,b,c,d) {
tec
source share