I am using Backbone's validate
function to guarantee Man
to have an age
property more than 18. Here is my code:
var Man = Backbone.Model.extend({ initialize : function(){ this.on("error",function(model,error){ alert(error); }); }, validate : function(attrs,options){ if (attrs.age < 18){ return 'below 18'; } } }) var man = new Man({name : 'qian', age : 12});
But looking at the result it seems that validate
doesn't work.
In Backbone.js (prior to version 0.9.10
), validate
is called before save
as well as before set
.
You will get an alert error when you set invalid value.
Example - age
value is below 18 :
var man = new Man ({name : 'qian', age : 12}); man.set({ age: 12 }); // that will trigger alert
EDIT
For Backbone.js version 0.9.10+
there is an issue reported: Failed validation does not trigger error callback. Issue explanation says that
invalid
event should be used instead oferror
So changing your code to:
var Man = Backbone.Model.extend({ initialize : function(){ this.on("invalid",function(model,error){ alert(error); }); }, ...
And setting variable with validate
option set to true
will trigger an alert
.
man.set({age: 12}, {validate : true});
For backbone v.1.0.0
var Man = Backbone.Model.extend({ initialize : function(){ this.on("invalid",function(model,error){ alert(error); }); }, validate : function(attrs, options){ if (attrs.age < 18){ return 'below 18'; } } });
//Object will be created with invalid attribute 'age' var man = new Man({name : 'qian', age : 12}); console.log(man) // Returns an object with invalid attributes // But we'll use only valid objects. // Also we'll get the error message in alert, if validation fails. if(man.isValid()){ alert( man.get('name') ); } var man = new Man({name : 'qian', age : 19}); if(man.isValid()){ alert( man.get('name') ); }
//Object will be created without any passed attributes var man = new Man({name : 'qian', age : 12}, {validate:true}); console.log(man) //Object will be without passed attributes /* man.isValid() returns 'true' throw we passed invalid attrs. We won't see any error alert message, because Backbone created empty object */ /* Doesn't work */ if(man.isValid()){ alert( man.get('name') ); //undefined } /* Works */ // Created model had invalid attrs, so validationError won't be empty. // If all attrs are valid, validationError will be empty if(!man.validationError){ alert( man.get('name') ); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With