2010-08-13 13 views
14

Non ero sicuro di poter fare questo tipo di domanda, ma dopo aver visto this su Meta Stackoverflow, sembra che questo tipo di domanda sia ok. Bene, sulla mia domanda:Framework di convalida dei form JavaScript: Richiesta di revisione

Alcuni mesi fa ho scritto un framework di convalida in Javascript. So che esistono già quadri di convalida come jQuery Validation, ma volevo adottare un approccio diverso alla convalida. Gli approcci attuali riguardano la scrittura del codice Javascript per eseguire la convalida sugli elementi del modulo. Osservando il codice sorgente del modulo, non è immediatamente evidente quale verifica avvenga su ciascun elemento. In una certa misura questo può essere risolto utilizzando le classi CSS che specificano diversi tipi di convalida. Ma sentivo che anche questo era limitato perché non si può facilmente personalizzare il comportamento della validazione (messaggi di errore, ecc.). Volevo fare qualcosa come la validazione basata su annotazioni in Java usando JSR-303 Bean Validation o Hibernate Validator.

Poiché HTML5 consente di aggiungere attributi personalizzati a un elemento, ho pensato che avrei potuto sfruttare questo per "annotare" gli elementi del modulo per la convalida. Quindi, in sostanza, sono arrivato fino a questo:

<input id = "myInput" 
     name = "myInput" 
     type = "text" 
     class = "regula-validation" 
     data-constraints = '@NotEmpty @IsNumeric @Between(min=1, max=5)' /> 

Con questa idea di base in mente, ho creato un framework Javascript che:

  • esamina il DOM per gli elementi che hanno vincoli definiti e si lega questi vincoli agli elementi
  • permette la creazione di vincoli personalizzati
  • Consente programmatica vincolante dei vincoli
  • vincoli legati Convalida

Inoltre, il quadro ha le seguenti caratteristiche:

  • gruppi di convalida, analogo a quello specificato nella JSR-303
  • interpolazione per i messaggi di errore

Una volta ho creato il mio quadro Ho cercato di ottenere feedback e recensioni per questo, ma non ero sicuro di dove andare per ottenere feedback e recensioni. Ho scritto alcuni post su questo blog e l'ho pubblicato su Digg e Reddit (sezione di programmazione) senza molta fortuna. Alcune persone sembravano interessate, ma non ho ottenuto molto di più.

Recentemente, sul mio posto di lavoro abbiamo modernizzato un codice di base legacy (JSP e servlet) e lo abbiamo spostato in Spring MVC. Quando è arrivata la conversazione di convalida, ho presentato la mia struttura al mio architetto senior. Ho fatto un po 'di integrazione e prove di concetto e mi sono sembrati interessati e mi hanno dato il via libera per aggiungerlo al progetto. Fino ad ora, avevo solo la mia modesta opinione che questo sarebbe stato un modo utile per fare la convalida, quindi questo mi ha dato una certa sicurezza che la mia idea e il mio framework avrebbero avuto qualche merito. Tuttavia, avevo ancora bisogno di più partecipazione e struttura. Dopo aver capito che Stackoverflow consente questo tipo di domande, ho deciso di postarlo qui per ottenere critiche costruttive, commenti e feedback.

Quindi, senza ulteriori ritardi, vorrei introdurre Regula. Il link che ho fornito va a una wiki su GitHub che ha tutta la documentazione per il framework. È possibile scaricare l'ultima versione (v1.1.0) da here.

In attesa di un vostro commento.

Alcune informazioni in più che non è immediatamente rilevante

avevo accarezzato l'idea di integrare il mio quadro con la Primavera, vale a dire, traducendo le annotazioni di validazione sui fagioli nella validazione lato client. Recentemente sono stato in grado di farlo funzionare, anche con i gruppi di validazione (anche se attualmente non esiste alcun supporto per le relazioni di ereditarietà tra i gruppi sul lato client). In questo modo, è sufficiente annotare le proprietà del campo con i vincoli di convalida e il codice di convalida lato client viene generato automaticamente. Tuttavia, sono un debuttante di primavera e quindi il mio metodo probabilmente non è così pulito. Mi piacerebbe avere un feedback anche su questo, quindi se qualcuno è interessato per favore fammi sapere. Idealmente (e spero di non essere troppo pretenzioso) mi piacerebbe contattare la gente di Spring e vedere se sono interessati a questo.

+0

Non ho davvero un caso d'uso per esercitarlo veramente; ma voterò e preferito, poiché sembra un buon concetto. Sono curioso di vedere cosa ne fanno le persone. La mia scelta di framework web, wicket, elimina principalmente la necessità di convalida javascript, poiché fornisce le facoltà per l'invio di dati e la produzione di feedback dal server tramite richiesta Ajax. So che altri framework, come ASP.NET, incoraggiano la validazione lato client per il feedback dinamico (anche se è sempre necessario eseguire la convalida del server all'invio del modulo). – RMorrisey

+0

@RMorrisey grazie per il tuo commento! Non ho provato il wicket, ma mi piacerebbe dargli un'occhiata qualche volta. Penso che JSF faccia anche qualcosa di simile a ciò che descrivi. Al lavoro abbiamo qualche convalida che viene eseguita solo sul lato server. Con il mio framework sono stato in grado di farlo sul lato client come nel modo in cui descrivi. Ho un vincolo personalizzato con un validatore che effettua una richiesta AJAX per eseguire la convalida. Grazie ancora per il tuo feedback! –

+0

So che è fuori tema e fuori tempo per questo, ma come hai iniettato l'annotazione sui vincoli di dati? Sono arrivato alla domanda mentre cercavo di fare qualcosa di simile (regula è più che sufficiente per le mie esigenze) –

risposta

7

Mi piace già molto, mantiene pulito il mio html e la possibilità di creare validatori personalizzati è ottima. Una cosa che ho aggiunto è stata una mano breve per il legame della convalida e inviare funzioni, l'avvolse in un plugin jQuery:

if (jQuery) { 
    (function($) 
    { 
     $.regula = function(formId, callback) 
     { 
      regula.bind(); 

      $("#" + formId).submit(function() 
      { 
       var validationResults = regula.validate(); 

       if (validationResults.length > 0) 
       { 
        if (callback) 
         callback(validationResults); 

        return false; 
       } 

       return true; 
      }); 
     }; 
    })(jQuery); 
} 

Infatti, ho appena blogged su di esso per come sono che colpiti dalla pulizia ed è facile. Ho ancora intenzione di passare il tempo a esaminare la tua fonte, per vedere come è stata completata, ma è un ottimo inizio :)

Per quanto riguarda l'integrazione del framework, lavoro principalmente con ASP.NET MVC, e sarebbe essere interessante vedere come traduce la logica di convalida lato server nei vincoli lato client. Qualcosa che potrei guardare nel prossimo mese o giù di lì.

+0

Grazie per il feedback e il post sul blog di Matthew! Io lavoro principalmente sul lato Java delle cose; Non ho mai fatto .NET, ma sarei interessato a esaminarlo! –

+1

Ne ho giocato un po 'di più e ho trovato un modo per generare automaticamente vincoli di dati basati sugli attributi forniti dallo spazio dei nomi DataAnnations di .NET. So che sei un ragazzo di Java, ma se sei interessato a vedere come l'ho fatto, aggiornerò il mio blog con un esempio stasera. Immagino che il concetto per farlo con i fagioli in primavera sia essenzialmente simile anche se con un sapore Java ... –

Problemi correlati