Я столкнулся со странным поведением проверки модели в Backbone.js.
Когда модель создается впервые, например,
var foo = new Foo({
bar: 42
});
Backbone вызывает foo.set ()
, передавая в качестве параметра заданную карту {bar: 42}
, как можно видеть из источника . При этом он также передает параметры {silent: true}
, как в строке
this.set(attributes, {silent : true});
. Это имеет смысл, поскольку наличие silent === true
позволяет избежать запуска ] change
событий, которые не имеют смысла в данном контексте.
По какой-то причине я не могу понять, silent === true
также предотвращает проверку ; см. источник в строке
if (!options.silent && this.validate && !this._performValidation(attrs, options)) return false;
Таким образом, похоже, что модель никогда не проверяется при создании, но обычно это происходит при изменении некоторых атрибутов. Более того, наличие проверки неразрывно связано с действием отправки событий изменения
, что является чем-то полностью ортогональным.
Кто-нибудь может объяснить, почему это так? Каким будет чистый и перспективный способ решения этой проблемы?
Я мог бы вручную вызвать _performValidation
, но у этого есть два недостатка:
_performValidation
не является частью API и, возможно, он изменится в будущих выпусках.