Как проверить, какие значения в моей форме изменились перед сохранением? - PullRequest
0 голосов
/ 26 июля 2011

Ситуация такая.У нас есть форма с большим количеством полей (более 30, разбросанных по нескольким вкладкам), и я хочу найти, какие значения изменились перед сохранением с минимальным влиянием на производительность.Что происходит сейчас, для редактирования запрашиваются отдельные записи из нескольких баз данных.Значения передаются на клиентскую сторону как объекты значений.На данный момент они не привязаны ни к каким полям в форме.

Моя первоначальная идея заключалась в том, чтобы для каждого поля был установлен логический флаг, который устанавливал бы значение true или false при каждом изменении любого из полей.Во время сохранения программа запускает список флагов, чтобы увидеть, какие поля изменились.Это кажется мне более чем неуклюжим, поэтому я подумал, что это можно сделать на стороне сервера.Но тогда я не хочу проходить каждое поле один за другим, проверяя, какие из них не соответствуют записям БД.

Есть идеи, что здесь делать?

Ответы [ 2 ]

0 голосов
/ 26 июля 2011

Это похоже на то, что мы делаем с одним из проектов, над которым я работаю для клиента.

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

Если вам нужно обновлять каждое поле / свойство в зависимости от того, изменилось оно или нет;тогда я не вижу способа избежать проверки с каждым полем / свойством.Даже если вы реализуете свою логическую идею и меняете флаг в пользовательском интерфейсе всякий раз, когда что-то меняется;вам все еще придется проверять эти логические значения при создании запроса, чтобы определить, что следует обновлять или нет.

В моей ситуации запрашиваются три разные базы данных для создания объекта значения, который отправляется обратно впользовательский интерфейс.Обновления полей сохраняются в одной из этих баз данных и имеют первый порядок предпочтений при выполнении выбора.Итак, у вас есть явное сравнение полей по полям, происходящее внутри хранимой процедуры.

Если вам не нужно сравнение полей по полям, а сравнение «запись по записи»;тогда булевский подход, позволяющий вам узнать, что объект записи / значения изменился, сэкономит вам немного времени и затрат на кодирование.

0 голосов
/ 26 июля 2011

Это очень распространенная проблема для многих приложений Flex.Поскольку это происходит так часто, существует ряд коммерческих реализаций для управления данными.Запросы хранятся в сущностях, и эти сущности связаны с формой на стороне клиента.Всякий раз, когда поле обновляется, оно автоматически выполняет действия, чтобы сохранить изменения в БД и выполнить откат при запросе.

Управление данными Adobe LCDS - Если вы имеете дело со средой Java WebOrb - Если вы имеете делос окружением .net, php, java, rails

Конечно, вы можете заново изобрести колесо и развернуть свое собственное, настроить прослушиватели PropertyChangeEvent для каждого поля.Когда изменения отправляются, слушайте их и пишите обработчики для каждого.

...