Задача:
Есть много HTML-форм, каждая из которых состоит из блоков. Блок — это одно или несколько полей для ввода данных с логикой проверки на стороне клиента, иногда с AJAX-запросом для проверки или подгрузки доп. информации на стороне сервера. Примеры блоков:
- ввод даты приёмки товара
- ввод поставщика и договора с ним с проверкой на согласованность даты подписания договора с датой приёмки товара
- ввод суммы покупки вместе с НДС (может быть разбивка на НДС-10% и НДС-18%) с проверкой на правильность вычисл. НДС
- ввод номера накладной с проверкой на уникальность в базе
ну, и так далее.
Как видно в примере, блоки между собой получаются сильно связанными, имя поставщика зависит от даты приёмки, логика проверки НДС зависит от типа поставщика (если он упрощенец, то нету никаких НДС) и так далее. Форм много, то нам не нужно задавать поставщика, он у нас насильно снаружи задан, то у нас у покупки нету чека ККМ и поэтому мы не можем по нормальному провести её в бухгалтерии (от этого часть блоков становится ненужной), то ещё что-нибудь.
Хочется сделать для каждого блока шаблон HTML + JavaScript, который спрячет всю нетривиальную магию внутрь.
Дополнительные пожелания:
- Первый раз (начальное состояние) хочется рендерить всё на сервере и сразу формировать HTML. Потом пускай в процессе редактирования данных его JavaScript 10 раз поменяет, но первую отрисовку хочется делать быстро. На сервере python+Django
- Минимальное насилие над уже написанным кодом и независимость страниц друг от друга. Мы не хотим и не можем переписать всю кучу кода под эти новые блоки сразу. Старое пускай так и работает на jQuery с ручными обработчиками всех event’ов
А теперь вопрос: на чём это посоветуете сделать? AngularJS? Backbone? Ещё что-то?
Если можно, то с примерами таких вот блоков.
Angular не нравится тем, что всё делает на клиенте, меня, честно говоря, подташнивает от интерфейса Google AdWords, Analytics и т. д., которые долго-долго грузятся, потом тяжело ворочаются, на каждый чих что-то норовят ещё загрузить и перерисовать. Хотя, может быть я чего-то не понимаю.