2013-03-13 1 views
0

J'utilise Backbone 0.9.10.Solution de contournement pour le bogue de validation dans Backbone 0.9.10

var Person = Backbone.Model.extend({ 
    defaults: { 
     name: "John Doe", 
     age: 30 
    }, 
    validate: function (attrs) { 
     if (attrs.age < 0) { 
      console.log("Age must be positive, idiot!"); 
     }; 
    } 
}); 

Si je fais ça sur la console ...

var p = new Person; 
p.set("age", -20, {validate: true}); 

... mon modèle est mis à jour de toute façon. Comment puis-je empêcher cela?

Je connais there's an issue open, mais y a-t-il une solution de contournement? Ou dois-je attendre une correction de bugs?

Répondre

3

Le problème est que votre appel à set utilise le nom d'attribut Age (avec un capital A) plutôt que age.

p.set("age", -20, {validate: true}); 

En outre, lorsque le validate échoue, vous devez retourner autre chose que undefined.

validate: function (attrs) { 
    if (attrs.age < 0) { 
     return "Be more positive!"; 
    } 
} 
+1

La capitale "Age" était juste une faute de frappe, en écrivant la question. Je l'ai édité maintenant. Ce n'est pas le vrai problème dans mon cas. Mais ce que je ne savais pas, c'est que je devais retourner quelque chose d'autre que "indéfini" pour travailler. Merci! –

Questions connexes