Validation logic has been changed in Backbone 0.9.10 . Quoting from the change log, the check now works as follows:
Model validation is now applied only by default in saving Model # and is no longer applied by default when building or in the Model # set if the {validate: true} option is not passed.
So, if you want the model to be checked during initialization or set , you need to pass the validate:true option to the constructor / method.
The reason you don't accept the invalid event when manually calling the model.validate method is because Backbone does not perform any checks when you do this. You call the method that you defined on the model, and Backbone knows nothing about it.
Checking the model in the baseline is based on the convention that Backbone does not define a method called validate on the model — you do it yourself. However, if you define such a method, Backbone will call it for you when checking (in save or in the constructor / setter with validate:true , and the invalid event will occur.
source share