Backbone: validation des attributs un par un
J'ai besoin de valider un formulaire avec un tas d'entrées. Et, si une entrée n'est pas valide, indiquer visuellement sous la forme d'un attribut n'est pas valide. Pour cela, j'ai besoin de valider chaque élément de formulaire individuellement.
J'ai un modèle & un point de vue représentant la totalité du formulaire. Maintenant, quand je mets à jour un attribut:
this.model.set('name', this.$name.val())
de la validation de la méthode sur le modèle sera appelé.
Mais, dans cette méthode, je suis la validation tous les attributs, donc lors de la définition de l'attribut ci-dessus, tous les autres sont également validés, et si quelqu'un n'est pas valide, une erreur est retournée. Cela signifie que même si mon attribut "name" est valide, j'ai des erreurs pour les autres.
Alors, comment puis-je valider juste un attribut?
Je pense qu'il n'est pas possible de valider un attribut via la validation de la méthode. Une solution est de ne pas utiliser la méthode de validation, et au lieu de valider chaque attribut sur "modifier" de l'événement. Mais alors, ce serait faire beaucoup de changements gestionnaires. Est-ce la bonne démarche? Que puis-je faire?
Je pense aussi que cela indique un problème plus important de la colonne vertébrale:
Chaque fois que vous utilisez
model.set()
définir un attribut du modèle, votre méthode de validation est exécutée et tous attributs sont validés. Cela semble contre-intuitif que vous voulez juste que seul attribut pour être validé.
source d'informationauteur treecoder
Vous devez vous connecter pour publier un commentaire.
Validate
est utilisé pour garder votre modèle dans un état valide, il ne vous laisse pas définir une valeur non valide à moins que vous passiez unsilent:true
option.Vous pouvez soit régler l'ensemble de vos attributs en une seule fois:
ou de valider un par un avant de les mettre
J'ai récemment créé un petit Backbone.js plugin, De la colonne vertébrale.validateAllqui vous permettra de valider que le Modèle des attributs qui sont actuellement enregistrés/fixé par le passage d'un validateAll option.
https://github.com/gfranko/Backbone.validateAll
La question n'est pas de colonne vertébrale, il ne vous force pas à écrire la validation d'une certaine façon. Il n'y a pas de point dans la validation de tous les attributs ont persisté dans le modèle, la cause normalement, votre modèle ne contient pas d'attributs non valides, cause
set()
ne change pas le modèle, si la validation échoue, à moins que vous passiez silencieux option, mais c'est une autre histoire. Toutefois, si vous choisissez cette voie, la validation viens de passer toujours pour ne pas les attributs ont changé parce que du point mentionné ci-dessus.Vous pouvez librement choisir une autre voie: uniquement de valider les attributs qui doivent être définies (passé comme argument à
validate()
).Vous pouvez aussi surcharger votre modèle de la fonction de jeu avec votre propre fonction pour passer en mode silencieux: true pour éviter le déclenchement de la validation.
Fondamentalement passe {silencieux:true} dans les options et les appels de la colonne vertébrale.Modèle de fonction par des {silencieux: true}.
De cette façon, vous n'aurez pas à passer {silencieux: true} comme des options partout, où que vous appelez
c'.de modèle.set('propertyName',val, {silencieux:true})
Pour les validations, vous pouvez également utiliser la colonne vertébrale.La Validation du plugin
https://github.com/thedersen/backbone.validation
J'ai dû faire une modification à la backbone.validation.js fichier, mais il rendu la tâche beaucoup plus facile pour moi. J'ai ajouté de l'extrait de code ci-dessous pour valider la fonction.
Que je ne puis appeler la validation sur un seul attribut comme