ВОпрос по интерфейсу

Gor

Well-known member
07.06.2005
517
1
#1
Всем доброго дня!

Есть у меня достаточно часто возникающая задачка лотус под web.
Хочется узнать кто как реализовывает подобные вещи.

Всё очень просто - Пользователю хочется чтобы в одном поле можно было и выбирать из списка какое нибудь значение,
и забить любое значение фри формата руками (типа как в поле Dialog list с галочкой Allow values not in list в толстом Лотусовом клиенте).
Мне кажется у меня подобные вещи как то колхозно реализованы...(
(я для таких действий создаю 4 поля - Editable, Dialog list и Computed for display, и поле с крыжиком - фри формат или констант)

Кто как это реализовывает под Web?
 
K

K-Fire

#2
Можно использовать следующий вариант:
- Обычное текстовое поле
- кнопка рядом с полем, на которой навешен JS-код. По кнопке открывается некий "диалог" который возвращает выбранное значение и затем это значение помещается в поле.

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

Gor

Well-known member
07.06.2005
517
1
#3
Можно использовать следующий вариант:
- Обычное текстовое поле
- кнопка рядом с полем, на которой навешен JS-код. По кнопке открывается некий "диалог" который возвращает выбранное значение и затем это значение помещается в поле.

Если выбор нужно производить из жестко заданного списка, то можно найти JS-библиотечки, которые рисуют красивый диалог.
Если выбор из справочника из БД, то можно за полдня-день написать отдельный свой диалог.
А есть какой нибудь пример на реализацию подобного?

Просто не совсем понимаю как можно в отдельном диалоге на JS (который будет вызываться по нажатию кнопки рядом с полем) отображать для
выбора значения из полей лотусовых документов...

Или подскажите с чего можно подступиться к реализации...
 
K

K-Fire

#4
Примеров под рукой нету.

Как это обычно делается.
Создаете новую форму в нотесе, на вебквериопен вешаете агент, который возьмет некую вьюшку с данными, и отобразит ее в виде таблицы из 1го столбца в этой форме.
Далее добавляете JS-код в таблице, чтобы при нажатии на строку бралось выбранное значение (или некий ID) и передавалось в вызываемое окно.
Эта передачу лучше всего делать через Callback-функцию, т.е. при вызове по кнопке диалога ему передается название функции, которую потом вызываем с параметром "выбранное значение". А уже в той функции заполняем текстовое поле.

Т.е. на кнопке выбора значений примерно такой код:
window.open("mydialog?OpenForm&param1=zzzzz&param2=zzzzzz&Callback=MyCallbackFunction")

А в коде при нажатии на выбранную строку в диалоге:

var selectedValue = getElementById(<тут id тега td>).innerHTML;
var yourCallbackFunction = window.opener.MyCallbackFunction(selectedValue) <--- вот эту строчка яваскрипта должна быть вычисляемая, т.е. подставить имя callback функции из переданного параметра. Возможно это как-то можно проще, без вычисления делать, но я уже не помню.
 

Кирилл Шваб

Well-known member
30.06.2006
145
4
#5
Еще можно сделать без дополнительного диалога.

На странице размещаешь 2 поля:

1. одно с списком имеющихся значений (т.е. <select>)
2. второе для ввода нового значения (т.е. <input type="text">)

По умолчанию 2-е поле скрываешь, а к 1-му добавляешь в начало/конец что-то вроде " - Другое - ", и если сотрудник выбирает его, то javascript'ом показываешь второе поле и даешь его заполнить.

При отправке данных соответственно проверяешь не выбрано ли "другое" значение, и если оно выбрано - то в итоговое поле подставляешь значение из дополнительного поля.