Closed Epsilonnnn closed 5 years ago
Меня всё ещё смущает такой кейс: https://github.com/yandex-ui/noscript/blob/master/src/ns.update.js#L472-L481
вот мы запустили this._requestAllModels.bind(this)
модели запрашиваются, запрашиваются
допустим уже мы получили m1
, а m2
ещё запрашивается
в этот момент кто-то изменил m1
и запустил ns.page.go()
и вот этот ns.page.go()
мы по новой логике хотим отменить - а значит потеряем перерисовку так ведь?
Собственно вопрос:
может нам достаточно унести ns.page._setCurrent(route, url);
на момент до вызова ns.page.followRoute(route)
?
Как-то так:
ns.page._setCurrent(route, url); // СЮДА уношу
return ns.page.followRoute(route)
.then(function() {
// ns.page._setCurrent(route, url); - ТУТ комменчу
ns.page._fillHistory(url, historyAction);
// router says "redirect"
if (route.page === ns.R.REDIRECT) {
return ns.page.redirect(route.redirect);
}
ns.page.title();
return ns.page.startUpdate(route);
}, triggerPageErrorLoad);
?
Ответ на первый глобальный коммент:
Да это реальный случай, и если внимательно посмотреть на проверку, то можно увидеть, что я не просто отменяю все ns.page.go()
, если в это время есть переходы. Я специально не отменяю ns.page.go()
, если у него оказался урл, который равен урлу текущего перехода. В таком случае переход должен быть корректным и обновление должно сработать.
Ответ на 2 глобальный коммент:
Насколько я понял, почему ns.page._setCurrent(route, url)
ставится именно после followRoute
- так как followRoute
это подготовка к переходу на страницу, и если он зареджектится, то перехода не будет, а это означает, что если ставить ns.page._setCurrent(route, url)
до followRoute
, то в какой-то момент ns.page.currentUrl
не будет совпадать с фактическим лейаутом, который отрисован
мне немного стрёмно, что мы храним _lastTransitionUrl
(yate another url)
кроме того, сейчас запущенный ns.page.go(url1)
никогда не будет перебиваться ns.page.go()
и мы таки теряем перерисовку?
сделал сбрасывание lastTransition, после завершения. Апдейт текущей страницы не теряется из-за этого условия - https://github.com/yandex-ui/noscript/pull/659/files#diff-85b7bd891fc417d150d5803fe257a28dR153
Merged in #664.
… страницами