Хороший пример этого шаблона проектирования можно найти в " Mastering Dojo ". На самом деле вся книга советует нам делать сайты таким образом , когда речь идет о насыщенных интернет-приложениях . Может быть, это немного излишне для обычного веб-сайта с разными страницами.
Я попробовал их примеры, и то, как они это делают, очень хорошо работает на моей машине. По сути, идея состоит в том, чтобы отделить данные, которые заполняют ваши виджеты, от метаданных (т.е. информацию о том, как виджеты располагаются на вашей странице - стили, позиции и т. Д.).
Схематически (из книги) вы получите несколько функций, которые распараллеливаются посредством отложенных / обещаний, например:
function init() { // initialize global variables }
function getData() { // retrieve data from the server }
function getMetaData() { // retrieve metadata from the server }
function continueWithData() { // push data into cache }
function continueWithMetadata() { // prepare panel with HTML controls, etc. }
function finish() { // Push data into HTML controls and release the panel to the user }
Эти функции связаны следующим образом:
init()
|
v
-----------------------------------------------
| |
v v
getData() getMetadata()
| |
v v
continueWithData() continueWithMetadata()
| |
v v
----------------------------------------------
|
v
finish()
Приношу свои извинения за копирование схемы книги. Надеюсь, я не нарушаю авторских прав, и в блогах могут быть более совершенные шаблоны, но мне очень нравится, как это там объясняется, так что ...
Весь параллелизм реализуется через dojo.Deferreds. Я думаю, что теперь проще с dojo.when / dojo.then , так что вы можете попробовать ...