11.06.2015, 20:55 | #1 | ||
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,356
Репутация скрыта
|
Реализация редактирования элементов управления
Стоит следующая задача. Вот у меня есть некий логический объект на странице - допустим, дерево. Как я его генерирую - думаю, не важно. Пользователь может сворачивать и разворачивать узлы дерева, а также редактировать логические объекты на узлах этого дерева. Цель - дать ему возможность изменить, скажем, название узла + ещё некоторый набор характеристик. Я веду к тому, что в каждый узел весь набор элементов упрвления для изменения характеристик не запихнёшь - значит, нужно открывать "окно" или какой-то контейнер с элементами, а затем обновлять узел дерева. Как это лучше сделать? Мысли следующие: 1) Открыть всплывающее окно - сразу отметаю. Всплывающие окна могут быть заблокированы, и требовать их разблокировать для нормальной работы я не хочу. 2) Реализовать некий popup, т.е. по сути всплывающее окно, но в рамках самой страницы, не как отдельный объект window. Тогда дерево можно будет обновить после завершения редактирования при помощи ajax, а то и просто java script. Но это вариант для простых случаев. Поэтому остается один выход - отправлять пользователя на новую страницу, где он заполнит форму и затем сможет вернуться к исходному дереву. Я правильно рассуждаю? Но тогда возникает проблема - когда он вернется к дереву, хорошо бы восстановить в этом дереве, какие узлы были открыты, а какие - нет. И вот как это лучше сделать - для мена большой вопрос. Написать для каждого узла некий атрибут (к примеру, "state"), менять его при свертывание-развертывании узла и затем собрать такие "состояния" при помощи jquery-запроса в строку с идентификаторами объектов - логично. Но вот как лучше сделать так, чтобы эта строка оказалась на сервере? Пихать её в куки? Передавать через параметры запроса (она может быть большая!)? Принципиально отказаться от get и юзать только post-запросы? В общем, надеюсь, задача ясна, прошу дать рекомендации. P.S. Если что, пользуюсь ASP.NET MVC.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
||
|
13.06.2015, 14:08 | #2 | ||
Шаман
Регистрация: 13.04.2007
Адрес: Praha, ČR
Сообщений: 966
Репутация: 330
|
pokibor,
Элемент дерева это какой-то сильно сложный объект? Менять название лучше всего прямо не меняя контекст, например, показывать поле для редактирования вместо самого названия. Любое всплывающее окно это потеря контекста для пользователя, что не есть хорошо. Их вообще уже мало кто использует в современном мире. Если редактирование элемента не влияет на другие объекты, то лучше редактирование проводить прямо где-то рядом, обязательно давая понять пользователю что он редактирует. Как вариант, можно использовать какой-то popover, вот как это выглядит http://getbootstrap.com/javascript/#popovers-examples (сугубо для примера, не агитирую прямо использовать этот вариант). Если же каждый объект это что-то сильно сложное (много полей, текста), то тут без диалогового окна не обойтись, опять же, в качестве примера http://getbootstrap.com/javascript/#live-demo Обновлять дерево можно сравнивая текущее состояние DOM с данными от сервера (если в текущем дереве узел открыт, то ставим ему флаг открытости). Но опять же, если нет сортировки или какого-либо влияния на другие объекты, то перерисовывать нужно только один элемент, может и вовсе без общения с сервером (используя данные от формы редактирования). В плане GET/POST стоит запомнить одну простую вещь: GET должен быть всегда идемпотентным, т.е. повторный запрос не должен ничего менять на сервере - должен использоваться сугубо для чтения/получения данных. POST применяется для добавления новых объектов/редактирования (хотя для редактирования лучше использовать PUT/PATCH).
__________________
|
||
|
|