Формирование элемента в виде таблицы с применением Ajax

scorpion-ds

Новичок
Стоит задача разработать элемент в виде таблицы, самое близкое универсальное решение это jqGrid, но он не подходит, потому будет разрабатываться с нуля. Разумеется все должно работать на Ajax.

Таблица представляет из себя один календарный месяц по X, и категории расходов/доходов по Y, также присутствуют вычисляемые поля (сальдо, суммы по категориям, пересчет в базовую валюту и т.п.), каждая "ячейка" содержит N-инупутов согласно количеству настроенных валют.

Предположительно такая таблица будет содержать 5000 элементов input, в зависимости от количества категорий и валют (курс задается на каждый день).

Фактическая заполняемость данными ~5%, то есть более 90% таблицы всегда будет пустой.


Я отвечаю только за серверную часть, фронт-енд разработчики просят, что бы я при всегда формировал полную модель данных, то есть 95% данных который отсутствуют я заполнял "null", включая элементы разметки календаря. При этом планируется использовать AngularJS, потому от меня требуется сформировать полную модель данных для построения этой таблицы (грубо говоря я должен передать JSON, что бы angular смог построить весь элемент).

Мое предложение, формировать пустую таблицу основываясь на текущем месяце и категориях, далее отдельным этапом такая таблица должна будет заполняться данными, в идеале я бы хотел передавать только фактические данные.

Я знаком с элементов jqGrid, знаю, что там изначально строится сам элемент, а потом заполняется фактическими данными, при этом столбцы и другие параметры создаются на этапе построения элемента, а не при получении данных.

Подскажите, как правильней формировать и заполнять данными такой элемент?
 
Последнее редактирование:

hell0w0rd

Продвинутый новичок
Ну и идиоты фронтендеры там сидят. Я не удивлюсь, если они сразу все эти 5000 инпутов срендрят. Отправляй как просят, gzip все равно это отлично пожмет.
 

scorpion-ds

Новичок
Скорей всего инпуты будут генерироваться сразу, по крайней мере в другом элементе, который был всего до 31 инпута, так и было. В jqGrid на сколько я помню формирует инпуты только когда вызвано редактирование, в целом это правильно конечно, я предложу такой вариант, но это не моя юрисдикция так сказать ...

Клиент сегодня обновил ТЗ, количество инпутов x2, так как к каждому инпуту теперь идет инпут с комментарием.

Насчет генерить как просят, я беспокоюсь за серверную производительность, пусть хоть бы это были фактические данные, а так мне придется "нулями" заполнять больше 90% (как бы с тем же успехом, я мог на twig создать кусок HTML и аяксом передать). Сейчас стал использовать "JMSSerializerBundle" (сериализует объекты в json, xml), наверно лучше отказаться и генерировать просто массивы, иначе это еще дополнительные расходы памяти.
В тоже время фронты убеждаю, что генерировать "пустую" модель на клиенте, а потом только заполнять фактическими данными тоже плохо из-за производительности.
 

hell0w0rd

Продвинутый новичок
http://jsfiddle.net/zrus7wtz/1/ - ну вот так это надо делать. Еще надо таки добиться того, чтобы инпут и td были одного и того же размера. Чтобы ререндер был быстрый.
А на счет php - сырой php и sql желательно, имхо. То есть если даже доктрина, делаем обычный запрос, там есть возможность. Возвращаем массивчик и все ок.
 

ksnk

прохожий
Если придется генерировать инпуты, можно те, которые не изменились, сделать disabled, тогда они на сервер не улетят. При генерации таблицы пробежаться по инпутам и сохранить "начальное значение" в отдельном атрибуте.
Тогда либо самому сериализовать только измененные данные, либо, при отправке формы, проверить, что значения не изменились и задизейблить. После отправки - вернуть...
 

scorpion-ds

Новичок
Таблица сама по себе не будет формой, при редактировании будет обновляться только локальная модель данных, на сервер периодически будут отправляться только измененные данные (авто-сохранение каждые 5-7 сек.), кроме того будет присутствовать опция "отменить изменения" на N-шагов.

Насчет ипутов, то их все же будет только по количеству валют (3-5) + комментарий к каждой валюте, далее этот блок с ипутами будет вызваться при редактировании какой либо ячейки, грубо говоря будет одна "форма" которая будет перемещаться к нужной ячейке.

Примерно пока так, но мы еще размышляем как лучше ...
 
Сверху