Skip to content

Latest commit

 

History

History
39 lines (20 loc) · 3.62 KB

ns.update.logic.md

File metadata and controls

39 lines (20 loc) · 3.62 KB

Логика построения и обновления страницы

Отрисовка или обновление страницы запускается методом ns.page.go. На вход он принимает адрес страницы, возвращает promise, который разрешается после завершения обновления страницы.

ns.page.go работает в несколько этапов.

  • Адрес страницы с помощью маршрутизатора преобразуется в параметры страницы и id раскладки.

  • По id инстанциируется раскладка

  • В зависимости от значения второго аргумента ns.page.go добавляется или заменяется запись в истории.

  • На основе раскладки и параметров страницы создаётся экземпляр контроллера обновления и запускается. Метод start возвращает promise, который возвращается из метода ns.page.go.

    • Контроллер обновления рекурсивным проходом по раскладке страницы собирает виды, требующие обновления, и делит их на синхронные и асинхронные.

    • На основании видов получает 2 группы моделей, требующие запроса с сервера.

    • Запрашивает модели для синхронных видов.

      • Получив модели для синхронных видов с сервера, контроллер обновления рекурсивным проходом по синхронным видам строит из раскладки страницы и моделей дерево страницы для наложения шаблона.

      • Накладывает шаблон, получает html-узлы обновлённых видов. Асинхронные виды рендерятся в виде заглушек.

      • Рекурсивным проходом по видам контроллер обновления раскладывает по ним html-узлы и собирает события видов, чтобы запустить их в нужный момент.

      • Триггерит события видов.

      • Разрешает promise, выданный при старте.

    • Параллельно с запросом моделей для синхронных видов запрашиваются модели для асинхронных видов.

      • Получив модели для асинхронных видов с сервера, контроллер обновления рекурсивным проходом по асинхронным видам строит из раскладки страницы и моделей дерево страницы для наложения шаблона.

      • Накладывает шаблон, получает html-узлы обновлённых асинхронных видов.

      • Рекурсивным проходом по асинхронным видам контроллер обновления раскладывает по ним новые html-узлы взамен заглушек и собирает события видов, чтобы запустить их в нужный момент.

      • Триггерит события видов.