Использую что то подобное. Не делал свой templateEngine, просто грузил шаблоны jQuery — он все равно используется.
У меня $.get() возвращает промис, который присваивается в виде поля модуля templateReady и потом код который должен работать, когда шаблон уже загружен просто использует этот промис:
self.templateReady.then(function(){… });
В остальном очень похоже — require,js для модулей, вложенность моделей.
Еще для модульности в knockout у меня есть такая штука: github.com/xdenser/knockout-component
Правда загрузка шаблонов и модулей туда не встроена специально, чтобы можно было сделать, как нравится.
В нокауте нет роутинга. Это инструмент для биндинга. Я использовал Sammy.js для роутинга
Есть отличный пример построения SPA на Pluralsight pluralsight.com/training/Courses/TableOfContents/spa
Если что, то этот курс можно найти на торрентах.
В моем — есть и то и то. Не стал захламлять пример.
Но роутинг довольно простой и ограниченный — основные страницы, доступные из меню в 1 клик, имеют названия. Всякая мелочь типа всплывающих окон названий не имеет, и не меняет url. Т.е. роутинг не вложенный. Работает просто — в модуле меню висит метод на onhashchange, который по хэшу грузит в currentState то что нужно. Клики по ссылкам меню прописывают новый hash.
Вроде как в github.com/rniemeyer/SamplePresentation так же устроен.
angularjs от google решает те же задачи что и knockout плюс роутинг, плюс RESTful сервисы плюс dependency injection плюс фильтры данных. До того как с ним познакомился knockout был моим неоспоримым чемпионом.
Посмотрели в сторону angularjs, посмотрели количество отрытых багов и время, которые они там висят… и решили, что нет.
Хотя сам подход к организации кода и организации юнит-тестирования у них, несомненно, интересный.
Статистика из github issues — 400/1444 = 27,7% у AngularJS против 177/662 = 26,7% у Knockout. Вроде не сказать, чтобы великая разница. Или Вы как-то по-другому оценивали? Еще хороший вопрос, какие из задач актуальны для 1.х ветки, что из низ баги, что feature-реквесты, а что просто правка документации…
Пишем сложное приложение на knockoutjs