He encontrado un comportamiento extraño de la validación del modelo en Backbone.js.Validación del modelo de red troncal
Cuando se crea un modelo de primera, como
var foo = new Foo({
bar: 42
});
Backbone invoca foo.set()
pasando como un parámetro el mapa dado {bar: 42}
, como se puede ver en la source. Al hacerlo, también pasa las opciones {silent: true}
, como en la línea
this.set(attributes, {silent : true});
Esto tiene sentido, ya que el tener silent === true
evita la activación de las change
eventos, que no tienen sentido en este contexto.
Por alguna razón, no puedo entender, sin embargo, silent === true
también impide la validación; ver la fuente en la línea de
if (!options.silent && this.validate && !this._performValidation(attrs, options)) return false;
Por lo que parece modelo son Nunca validado cuando se crean, pero por lo general son cuando se cambian algunos atributos. Además, la presencia de la validación está inextricablemente ligada a la acción de enviar eventos change
, que es algo completamente ortogonal.
¿Alguien puede explicar por qué esto es así? ¿Cuál sería una forma limpia y a prueba de futuro para solucionar este problema?
que podría llamar manualmente _performValidation
, pero esto tiene dos inconvenientes:
- primer lugar, es algo que sólo podía olvidar
- en segundo lugar,
_performValidation
no es parte de la API y tal vez va a cambiar en lanzamientos futuros.
Ok, gracias, pensé que me faltaba algo – Andrea
Actualización de la versión 0.9.9: La validación ahora ocurre incluso durante cambios "silenciosos".Este cambio significa que el método isValid ha sido eliminado. Las validaciones fallidas también desencadenan un error, incluso si se especifica una devolución de llamada de error en las opciones. – romanlv