Napotkałem dziwne zachowanie sprawdzania poprawności modelu w pliku Backbone.js.Sprawdzanie poprawności modelu szkieletowego
Kiedy model jest stworzony, jak
var foo = new Foo({
bar: 42
});
Backbone wywołuje foo.set()
przekazując jako parametr daną mapę {bar: 42}
, jak widać z source. Czyniąc tak, to również przechodzi opcje {silent: true}
, jak w wierszu
this.set(attributes, {silent : true});
Ma to sens, ponieważ mając silent === true
unika wyzwolenie change
zdarzenia, które nie mają sensu w tym kontekście.
Z jakiegoś powodu nie mogę zrozumieć, ale silent === true
również zapobiega sprawdzeniu poprawności; zobacz źródło na linii
if (!options.silent && this.validate && !this._performValidation(attrs, options)) return false;
Więc wydaje modelu są nigdy zatwierdzone, gdy są one tworzone, ale zwykle są one gdy niektóre atrybuty są zmieniane. Co więcej, obecność walidacji jest nierozerwalnie związana z działaniem wysyłania zdarzeń change
, co jest czymś całkowicie ortogonalnym.
Czy ktoś może wyjaśnić, dlaczego tak jest? Jaki byłby czysty i przyszłościowy sposób rozwiązania tego problemu?
mogłem ręcznie wywołać _performValidation
, ale ma dwie wady:
- pierwsze, to jest coś, może po prostu zapomnieć
- sekundę,
_performValidation
nie jest częścią API i być może to się zmieni w przyszłych wydaniach.
OK, dziękuję, myślałem, że czegoś brakuje. – Andrea
Wersja 0.9.9 aktualizacja: Walidacja występuje teraz nawet podczas "cichych" zmian.Ta zmiana oznacza, że metoda isValid została usunięta. Nieudane sprawdzanie poprawności również powoduje błąd, nawet jeśli w opcjach określono odwołanie do błędu. – romanlv