Отрисовка или обновление страницы запускается методом ns.page.go
. На вход он принимает адрес страницы, возвращает promise, который разрешается после завершения обновления страницы.
ns.page.go
работает в несколько этапов.
-
Адрес страницы с помощью маршрутизатора преобразуется в параметры страницы и id раскладки.
-
По id инстанциируется раскладка
-
В зависимости от значения второго аргумента
ns.page.go
добавляется или заменяется запись в истории. -
На основе раскладки и параметров страницы создаётся экземпляр контроллера обновления и запускается. Метод
start
возвращает promise, который возвращается из методаns.page.go
.-
Контроллер обновления рекурсивным проходом по раскладке страницы собирает виды, требующие обновления, и делит их на синхронные и асинхронные.
-
На основании видов получает 2 группы моделей, требующие запроса с сервера.
-
Запрашивает модели для синхронных видов.
-
Получив модели для синхронных видов с сервера, контроллер обновления рекурсивным проходом по синхронным видам строит из раскладки страницы и моделей дерево страницы для наложения шаблона.
-
Накладывает шаблон, получает html-узлы обновлённых видов. Асинхронные виды рендерятся в виде заглушек.
-
Рекурсивным проходом по видам контроллер обновления раскладывает по ним html-узлы и собирает события видов, чтобы запустить их в нужный момент.
-
Триггерит события видов.
-
Разрешает promise, выданный при старте.
-
-
Параллельно с запросом моделей для синхронных видов запрашиваются модели для асинхронных видов.
-
Получив модели для асинхронных видов с сервера, контроллер обновления рекурсивным проходом по асинхронным видам строит из раскладки страницы и моделей дерево страницы для наложения шаблона.
-
Накладывает шаблон, получает html-узлы обновлённых асинхронных видов.
-
Рекурсивным проходом по асинхронным видам контроллер обновления раскладывает по ним новые html-узлы взамен заглушек и собирает события видов, чтобы запустить их в нужный момент.
-
Триггерит события видов.
-
-