Skip to content

Commit 4ca4127

Browse files
committed
Перезапрос моделей в ns.Update #464
1 parent e3eeca9 commit 4ca4127

File tree

1 file changed

+24
-7
lines changed

1 file changed

+24
-7
lines changed

src/ns.view.js

+24-7
Original file line numberDiff line numberDiff line change
@@ -665,29 +665,46 @@
665665
*/
666666
this.asyncState = false;
667667

668+
/*
669+
Логика такая: все виды должны себя ВСЕГДА добавлять.
670+
Иначе может получиться странная ситуация:
671+
Есть вид v1, он зависит от модель m1. Он валиден.
672+
Есть вид v2, он зависит от модели m2. Он невалиден.
673+
674+
v1 не сообщает свои модели, а v2 сообщает.
675+
В ns.request уходят знания только про m2.
676+
677+
Допустим в процессе запроса m2 кто-то инвалидировал модель m1.
678+
Про ее необходимость никто не знает,
679+
соответственно дело нормальным способом дойдет до отрисовки,
680+
где m1 будет перерисован как error-content
681+
*/
682+
668683
if (this.async) {
669684
var hasValidModels = this.isModelsValid();
670-
var hasValidStatus = this.isOk();
671685

672686
// shouldBeSync - специальный флаг, чтобы вид отрисовался
673687
// раньше это работало так,
674688
// update параллельно запрашивал модели для синхронных видов и асинхронных
675689
// поэтому когда запускался update для асинхронных модели уже были готовы и hasValidModels === true
676-
if (this.shouldBeSync || (hasValidModels && !hasValidStatus)) {
690+
if (this.shouldBeSync || hasValidModels) {
677691
// если асинхронный блок имеет валидные модели, но невалидный статус - рисуем его синхронно
678692
updated.sync.push(this);
679693

680-
} else if (!hasValidModels) {
694+
} else {
681695
this.asyncState = true;
682696
// если асинхронный блок имеет невалидные модели, то его не надо рисовать сразу
683697
updated.async.push(this);
684698
// прекращаем обработку
685699
return updated;
686700
}
687-
} else if (!this.isValidSelf()) {
688-
// реинвалидируем дочерние виды,
689-
// потому что их тоже придется перерисовать вместе с родителем
690-
this.invalidate();
701+
} else {
702+
703+
if (!this.isValidSelf()) {
704+
// реинвалидируем дочерние виды,
705+
// потому что их тоже придется перерисовать вместе с родителем
706+
this.invalidate();
707+
}
691708

692709
// если обычный блок не валиден
693710
updated.sync.push(this);

0 commit comments

Comments
 (0)