Я столкнулся со странным поведением проверки модели в 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;
Таким образом, кажется, что модель никогда не проверяется при их создании, но обычно это происходит при изменении некоторых атрибутов.Более того, наличие валидации неразрывно связано с действием отправки change
событий, что является чем-то совершенно ортогональным.
Может кто-нибудь объяснить, почему это так?Какой будет простой и надежный способ решения этой проблемы?
Я мог бы вручную позвонить _performValidation
, но это имеет два недостатка:
- во-первых, эточто-то, что я мог бы просто забыть
- секунду,
_performValidation
не является частью API и, возможно, это изменится в будущих версиях.