Форум Игромании
 
Регистрация
Справка

Internet и сети Интернет, Сети и всё, что с ними связано (кроме рекламы)

Ответ
 
Опции темы
Старый 11.06.2015, 20:55   #1
Кандидат наук
 
Аватар для pokibor
 
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 7,652
Репутация скрыта [+/-]
Реализация редактирования элементов управления

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

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

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

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

P.S. Если что, пользуюсь ASP.NET MVC.
__________________
Товарищ, верь: пройдет она -
Эпоха лживых, злых понятий.
Весь мир очнется ото сна,
И на обломках "демократий"
Напишут наши имена!

Мы были волшебницами (оригинальное фентези)
Тень Войны (фанфик по ГП)
pokibor на форуме  
Отправить сообщение для pokibor с помощью ICQ Ответить с цитированием
Старый 13.06.2015, 14:08   #2
Шаман
 
Аватар для adVISeR

 
Регистрация: 13.04.2007
Адрес: Praha, ČR
Сообщений: 966
Репутация: 327 [+/-]
pokibor,
Элемент дерева это какой-то сильно сложный объект?
Менять название лучше всего прямо не меняя контекст, например, показывать поле для редактирования вместо самого названия.

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

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


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


Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Rambler's Top100 Яндекс цитирования