Форум Игромании

Форум Игромании (http://forum.igromania.ru/index.php)
-   Internet и сети (http://forum.igromania.ru/forumdisplay.php?f=20)
-   -   Реализация редактирования элементов управления (http://forum.igromania.ru/showthread.php?t=139385)

pokibor 11.06.2015 20:55

Реализация редактирования элементов управления
 
Приветствую всех. web-разработку, можно сказать, осваиваю, поэтому прошу не ругаться за глупые вопросы.
Стоит следующая задача.
Вот у меня есть некий логический объект на странице - допустим, дерево. Как я его генерирую - думаю, не важно. Пользователь может сворачивать и разворачивать узлы дерева, а также редактировать логические объекты на узлах этого дерева.
Цель - дать ему возможность изменить, скажем, название узла + ещё некоторый набор характеристик.
Я веду к тому, что в каждый узел весь набор элементов упрвления для изменения характеристик не запихнёшь - значит, нужно открывать "окно" или какой-то контейнер с элементами, а затем обновлять узел дерева.

Как это лучше сделать?
Мысли следующие:
1) Открыть всплывающее окно - сразу отметаю. Всплывающие окна могут быть заблокированы, и требовать их разблокировать для нормальной работы я не хочу.
2) Реализовать некий popup, т.е. по сути всплывающее окно, но в рамках самой страницы, не как отдельный объект window. Тогда дерево можно будет обновить после завершения редактирования при помощи ajax, а то и просто java script. Но это вариант для простых случаев.

Поэтому остается один выход - отправлять пользователя на новую страницу, где он заполнит форму и затем сможет вернуться к исходному дереву. Я правильно рассуждаю?
Но тогда возникает проблема - когда он вернется к дереву, хорошо бы восстановить в этом дереве, какие узлы были открыты, а какие - нет. И вот как это лучше сделать - для мена большой вопрос.

Написать для каждого узла некий атрибут (к примеру, "state"), менять его при свертывание-развертывании узла и затем собрать такие "состояния" при помощи jquery-запроса в строку с идентификаторами объектов - логично. Но вот как лучше сделать так, чтобы эта строка оказалась на сервере? Пихать её в куки? Передавать через параметры запроса (она может быть большая!)? Принципиально отказаться от get и юзать только post-запросы?
В общем, надеюсь, задача ясна, прошу дать рекомендации.

P.S. Если что, пользуюсь ASP.NET MVC.

adVISeR 13.06.2015 14:08

pokibor,
Элемент дерева это какой-то сильно сложный объект?
Менять название лучше всего прямо не меняя контекст, например, показывать поле для редактирования вместо самого названия.

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

Если редактирование элемента не влияет на другие объекты, то лучше редактирование проводить прямо где-то рядом, обязательно давая понять пользователю что он редактирует. Как вариант, можно использовать какой-то popover, вот как это выглядит http://getbootstrap.com/javascript/#popovers-examples (сугубо для примера, не агитирую прямо использовать этот вариант).

Если же каждый объект это что-то сильно сложное (много полей, текста), то тут без диалогового окна не обойтись, опять же, в качестве примера http://getbootstrap.com/javascript/#live-demo

Обновлять дерево можно сравнивая текущее состояние DOM с данными от сервера (если в текущем дереве узел открыт, то ставим ему флаг открытости). Но опять же, если нет сортировки или какого-либо влияния на другие объекты, то перерисовывать нужно только один элемент, может и вовсе без общения с сервером (используя данные от формы редактирования).

В плане GET/POST стоит запомнить одну простую вещь:

GET должен быть всегда идемпотентным, т.е. повторный запрос не должен ничего менять на сервере - должен использоваться сугубо для чтения/получения данных.
POST применяется для добавления новых объектов/редактирования (хотя для редактирования лучше использовать PUT/PATCH).


Часовой пояс GMT +4, время: 19:05.

Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.