Во-первых, я являюсь автором JavaScriptMVC, поэтому я чрезвычайно предвзят в целом ряде способов.Во-первых, есть шесть вещей, которые вы когда-либо будете делать в приложении JS:
- Загрузка сценариев
- Ответ на пользовательские события
- Обновление DOM
- Запрос данных с сервера
- Преобразование этих данных во что-то полезное для JavaScript
- Организация вашей бизнес-логики интерфейса
Выбор архитектуры может зависеть от того, чтоинструменты, которые вы хотите / нужны.
Для общей архитектуры я считаю важным разделить проблемы.
Я настоятельно рекомендую вам найти способ управления зависимостями и шаблоны на стороне клиента.Они сделают вашу жизнь намного проще.
JavaScriptMVC использует многоуровневый подход MVC, который в значительной степени основан на пользовательских событиях пользовательского интерфейса и событиях OpenAjax.
Я создаю свои низкоуровневые виджеты с помощью $. Контроллер аналогично тому, как вы строите виджеты jQuery.Большая разница в том, что виджеты генерируют не-пользовательское событие, которое контроллеры верхнего уровня могут слушать.Например, виджет вкладок может генерировать событие «tab.activate», например:
$('.tab').trigger('tab.activated')
Затем мой контроллер более высокого порядка может прослушивать события tab.activation и модель для обновления содержимого вкладки, например:
".flickr tab.activated" : function(tabEl, ev){
Flickr.findAll({type : "rainbows"}, function(images){
tabEl.html("//path/to/view", images );
}
}
Flickr.findAll по существу выполняет запрос сообщений flickr, а затем перезванивает со списком изображений.Объединение функциональности service / ajax с моделями делает их более многократно используемыми.
Вы заметите, что в обратном вызове я обновляю html-элемент tab с отображаемым содержимым из представления.Вероятно, это не самый лучший способ сделать это, но я хотел быстрый пример.Лучше было бы передать контроллеру вкладок визуализированный вывод, чтобы он делал то, что будет с ним.Таким образом, если ваша вкладка когда-нибудь захочет исчезнуть в контенте, она сможет, и вашему главному контроллеру не нужно будет знать о реализации вкладки.
Самое главное - разбить ваше приложение насамые маленькие кусочки вы можете.Сделайте так, чтобы они были индивидуально тестируемыми (и гибкими), и объединяйте мелкие детали в большие по мере продвижения к своему приложению.