Creo que hay muchos desafíos para usted. La primera pregunta es cómo estructurar el código Javascript, es decir, cómo construir espacios de nombres para que no luchar contra las colisiones de nombres o tienen que nombrar sus funciones como
form1validate
form1aftersubmit
form2validate
form2aftersubmit
Uno de los patrones probados para los módulos en Javascript es utilizar una función anónima para construir un nuevo ámbito de denominación. La idea básica es Shon en el siguiente código
(function() {
var foo = 1;
})();
(function() {
if(foo == 1) alert("namespace separation failed!")
})();
Creo que este blog entry es una buena introducción.
La segunda pregunta que enfrenta es cómo evitar toda la repetición en el código de javascript. Tienes un par de armas en contra de esto.
- funciones - esto se hace obvio, pero a menudo se olvida volver a configurar el código común en las funciones donde se puede hacer. En su caso, esto servirá para copiar los valores de la respuesta json en los formularios y así
- función de orden superior - o funciones como datos - o devolución de llamada, ya que a menudo se llaman en javascript. Estas son las armas más poderosas en javascript. En caso de manejo de formularios y ajax, puede utilizar la devolución de llamada para evitar la repetición en el flujo de control de sus formularios.
Déjame construyo un ejemplo de la cabeza (usando jQuery para convinence)
// this is a validator for one form
var form1validator = function() {
if($("input[name=name]",this).attr("value").length < 1 &&
$("input[name=organisation]",this).attr("value").length < 1)
return "Either name or organisation required"
}
// and this for a second form
var form2validator = function() {
if($("input[name=age]",this).attr("value").length < 21
return "Age of 21 required"
}
// and a function to display a validation result
var displayResult = function(r) {
$(this).prepend("<span></span>").text(r);
}
// we use them as higher order functions like that
$("#form1").onSubmit(validator(form1validator, displayResult, function() {
//on submit
...send some xhr request or like that
});
$("#form2").onSubmit(validator(form2validator, displayResult, function() {
this.submit() // simply submit form
});
$("#form1b").onSubmit(validator(form1validator, function(r) {
alert("There was an validation error " + r);
}, function() {
//on submit
...send some xhr request or like that
});
// the validator function itself would be defined as
function validator(formValidator, displayResult, onSubmit) {
var r = formValidator.apply(this)
if(typeof(r) === 'undefined')
onSubmit(this)
else
displayResult(r)
}
¡gran recomendación, gracias! –