Давно мне не дает покоя одна фигня, связанная с динамическим редактированием данных.
Вот, смотрите.
Предположим, у меня есть набор данных для вывода во вьюхе (допустим, при помощи банальной таблицы). Допустим также, что я хочу редактировать их с помощью модального окна, которое, в свою очередь, использует ajax.
Есть три задачи:
-
создание записи: после сохранения новая запись должна появиться в таблице,
-
изменение записи: после сохранения данные в строчке таблицы должны быть обновлены,
-
удаление записи: после нажатия кнопки строчка из таблицы должна исчезнуть.
При обычных запросах (с обновлением страницы) это не проблема, но хочется динамики.
Какие решения вижу:
Для создания и изменения возвращать рендер какой-нибудь partial-вьюхи, типа _row.php, которая будет содержать в себе html-код одной строчки. В основной вьюхе (index.php) делать в цикле renderPartial(’_row’). Не нравится тем, что постоянно придется renderPartial дергать: накладные расходы растут.
Можно разбить на две вьюхи: в index обычный <? foreach (…) ?><tr>…</tr><? endforeach ?>, в _row отдельно код для одной строки. Не нравится тем, что не DRY.
Опять же, а каким образом осуществлять коммуникации? к примеру, если строку удалили - что передавать? А если обновили? (нужно будет передать не только новый html для строки, но и айдишник, например, чтобы на клиенте понять, в какое место пихать новый код)
Можно отказаться от серверного рендеринга и рендерить на клиенте (например, иногда использую knockoutJs), а во вьюху передавать json-данные: это чертовски приятно (работаем только с моделью как с observable-массивом данных, а клиент сам разбирается, что происходит), но по ощущениям явно недоиспользую (knockout и прочие angular хороши для создания полного SPA, а у меня только частичный)
Текущее решение-мутант - JsRender (от observables отказался, гоняю тупо шаблонизатор) + jQuery events + Json, во вьюхе серверный рендер списка через foreach, но там же неподалеку лежит template-script для использования аяксом.
И вот кажется мне, что я либо велосипеды какие-то изобретаю, либо из пушки по воробьям.
Как вы вообще решаете такие задачи?