javascript - tutorial - Backbone Validate no funciona
javascript injection tutorial (4)
En Backbone.js (anterior a la versión 0.9.10
), validate
se llama antes de save
y antes de set
.
Obtendrá un error de alerta cuando establezca un valor no válido .
Ejemplo: el valor de age
está por debajo de 18 :
var man = new Man ({name : ''qian'', age : 12});
man.set({ age: 12 }); // that will trigger alert
EDITAR
Para la versión 0.9.10+
Backbone.js, se 0.9.10+
un problema: la validación fallida no desencadena la devolución de llamada por error . La explicación del problema dice que
evento
invalid
debe ser utilizado en lugar deerror
Cambiando así tu código a:
var Man = Backbone.Model.extend({
initialize : function(){
this.on("invalid",function(model,error){
alert(error);
});
},
...
Y establecer variable con la opción de validate
establecida en true
activará una alert
.
man.set({age: 12}, {validate : true});
Estoy usando la función de validate
de Backbone para garantizar que Man
tenga una propiedad de más de 18 años. Aquí está mi código:
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});
Pero mirando el resultado parece que validate
no funciona.
Para la red troncal 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'';
}
}
});
Ejemplo 1. Sin {validate: true}
//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'') );
}
Ejemplo 2. Con {validate: true}
//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'') );
}
Si está utilizando una nueva versión (> 1.0) de Backbone y desea model.set
la validación en el momento del método model.set
,
entonces debe tener que pasar {validate: true}
para activar la validación.
utilizar
model.set({field:value},{validate: true})
O
model.set("field","value",{validate: true})
en lugar de
model.set({field:value})
var man = new Man({name : ''qian'', age : 12}, {validate : true});
EDITAR:
El método de validación funciona solo en caso de que pase un objeto de opciones con validate
param (de la versión 0.9.9): https://github.com/documentcloud/backbone/blob/master/backbone.js#L539
Y desencadena error
evento de error
pero invalid
evento invalid