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
invalidevent 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