no he probado esto, pero estoy bastante seguro de que todos los eventos en todos los modelos en una colección serán pasados a y activados por la recaudación también. Por lo que debe ser capaz de detectar el evento error
en la colección:
var cars = new Cars();
cars.bind('error', function() {
console.log('Model not valid!')
})
cars.add({'weight': -5});
Editar: No, esto funciona para establecer las propiedades de los modelos existentes, pero no en la creación del modelo. Ugh, parece que no hay forma de escuchar esto sin anular una parte del código Backbone. Modelos no llevan a cabo la validación cuando se inicializan:
var car = new Car({weight: -5});
console.log(car.get('weight')); // no error, logs -5
Y mientras lo hace collection.add()
realizar la validación, se produce un error en silencio.
Si utiliza collection.create()
en lugar de collection.add()
, se puede comprobar, ya que .create()
regresará false
en caso de fallo. Pero esto intentará crear el modelo en el servidor, que podría no ser lo que usted desea.
Por lo tanto, creo que la única manera de hacer esto es para anular collection._prepareModel
y desencadenar un evento personalizado, así:
Cars = Backbone.Collection.extend({
model: Car,
_prepareModel: function(model, options) {
model = Backbone.Collection.prototype._prepareModel.call(this, model, options);
if (!model) this.trigger('error:validation');
return model;
}
});
var cars = new Cars();
cars.bind('error:validation', function() {
console.log('Model not valid!')
});
cars.add({'weight': -5}); // logs: 'Model not valid!'
Ejemplo aquí: http://jsfiddle.net/nrabinowitz/f44qk/1/
Gracias , esto era justo lo que necesitaba. A veces, los documentos de Backbone no son excelentes para dar cuerpo a los detalles. – PetrolMan