backbone-validator v0.1.0
backbone-validator 
A super simple validator module for Backbone. It works both on the browser and nodejs.
Installing
In node:
npm install backbone-validator --saveIn the browser make sure that you add the backbone-validator-min.js script after you have loaded both Underscore and Backbone. The minimised file is 2k.
Usage
var Backbone = require('Backbone');
var validator = require('validator');
var MyModel = Backbone.Model.extend({
validate: validator.create({
type: { equal: 'user' },
firstname: { type: 'string', minLength: 3, maxlength: 20 },
email: { type: 'email' }
})
});
var model = new MyModel();
model.on('invalid', function (m, err) {
// Validation failed
// `err` will be a string with the error message.
});
model.set({ type: 'not user' }, { validate: true });API
validator.create( schema )
To use this module you basically invoke validator.create() passing it a
schema object. This will return a function, and we set the model's validate
property to this function, so that Backbone can use when setting attribute
values (ie: when model.save() is invoked).
Defining a schema
A schema object contains a property for each attribute we want to validate,
the property name is the attribute name and the value is an object containing
a set of rules.
In the example below we want to validate the ctime, status and message
attribues in our model, so our schema will look something like this:
validator.create({
ctime: { type: 'date' },
status: { oneOf: [ 1, 2, 3 ] },
message: { type: string, minLength: 5 }
});Rules
Eache rule is declared passing it options. This options depend on each of
the rules (ie: for the required rule options is just a boolean, for the
oneOf its an array, for custom its a function and so on.
required
validator.create({
message: { required: true }
});equal
validator.create({
type: { equal: 'user' }
});regexp
validator.create({
birthday: { regexp: /^\d{2}\/\d{2}\/\d{4}$/ }
});oneOf
validator.create({
colour: { oneOf: [ 'red', 'green', 'blue' ] }
});type. Types:boolean,number,string,date,array,email,urlanddomain.
validator.create({
balance: { type: 'number' }
});minLength. Can be used with strings or arrays.
validator.create({
firstname: { type: 'string', minLength: 3 }
});maxLength. Can be used with strings or arrays.
validator.create({
firstname: { type: 'string', maxLength: 20, minLength: 2 }
});Custom validation rules
var MyModel = Backbone.Model.extend({
validate: validator.create({
phone: {
custom: function (value) {
// This function will be called with the value that needs to be
// validated. If you want validation to fail simply return a string with
// the error message. If nothing is returned validation for this
// attribute is consider to have passed.
}
}
})
});TODO
- Make error messages customisable.
- Add browser tests.