Модальные Диалоги

Тема в разделе "Lotus - Xpages", создана пользователем NickProstoNick, 8 фев 2013.

  1. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Всем привет!
    Вот действительно насущная задача... как организовать диалог при помощи Extention Library, который будет ожидать реакции пользователя?
    Т.е. не станет выполнять код, следующий после вызова диалога.

    Просто хочется использовать один Custom Control диалога для всех страниц, а не хардкодить постоянно.
     
  2. KingGLEB

    KingGLEB Active Member

    Регистрация:
    8 май 2008
    Сообщения:
    30
    Симпатии:
    0
    Я вот сделал так. И работает без ExtLib.
    Создал custom control "dialogSelect". В нем:
    Код (Text):
    <xp:this.resources>
    <xp:dojoModule name="dijit.Dialog"></xp:dojoModule>
    </xp:this.resources>
    <xp:scriptBlock id="scriptBlock1">
    <xp:this.value><![CDATA[XSP.addOnLoad(function(){dialog_create("dialogSelect","Выберите")})]]></xp:this.value>
    </xp:scriptBlock>
    <div id="dialogSelect" style="display:none" class="lotusDialogWrapper">
    // сама форма
    </div>
    Создал еще custom control "SubForm" с кнопкой.
    Код (Text):
    <xp:button id="button1" value="ВызватьДиалог">
    <xp:eventHandler event="onclick" submit="false">
    <xp:this.script><![CDATA[dijit.byId("dialogSelect").show()]]></xp:this.script>
    </xp:eventHandler>
    </xp:button>
    Теперь везде вставляю "SubForm" и всё.
     
  3. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Покажи код вызова этого диалога. Больше чем уверен, что все закачивается dialog.show()
    А всю остальную обработку ты ведешь именно в диалоге.
    Такое мне не подходит

    Проблема таких диалогов - они не ждут реакции пользователя
     
  4. KingGLEB

    KingGLEB Active Member

    Регистрация:
    8 май 2008
    Сообщения:
    30
    Симпатии:
    0
    Да, кнопка с show(). А что они делают? Получается модальное окно в котором есть, например, две кнопки "ОК" "Отмена" и юзер никуда из него не денется. Или хочется модальное окно для всего браузера?
     
  5. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Хочется чтоб после dialog.show() код не выполнялся, пока пользователь не нажмет кнопочку по аналогии с LotusScript
     
  6. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Сегодня малость поигрался. Удалось организовать подобие.
    Что сделал... На основной странице форма документа и кнопка "Сохранить" (Submit)
    В диалоге 2 кнопки Ок (Submit) и Cancel (Button). На обеих один обработчик function DialogRresult( key: int ), где key - код кнопки по аналогии с MessageBox LS. В этой процедуре обрабатываю что нажал пользователь в диалоге и собственно дальнейшую обработку документа.
    В кнопке "Сохранить" - первичная проверка документа и вызов диалога и отмена Submit:
    <!--shcode--><pre><code class='js'>if(getComponent("untitled1").value != "" ){
    MessageBox( "Сохранить?", 1, 32, "TEST");
    false
    }[/CODE]
     
  7. KingGLEB

    KingGLEB Active Member

    Регистрация:
    8 май 2008
    Сообщения:
    30
    Симпатии:
    0
    Подойдет, но немного допилить. Если результаты диалога надо записывать в разные поля (диалог универсальный), то обработчик надо расширить параметрами.
    Код (Text):
    function DialogRresult ( key, typesave ) {
    if (key==1) {
    if (typesave=="Fields1") {
    doc.replaceItemValue("Field1", "1");
    doc.replaceItemValue("Field1_1", "1_1")
    } else if (typesave=="Fields2") {
    doc.replaceItemValue("Field2", "2");
    doc.replaceItemValue("Field2_1", "2_1")
    }
    } else if (key==2) {
    // ...
    }
    }
    В документе на кнопке 1 пишем:
    Код (Text):
    (Server)
    viewScope.typesave="Fields1"
    (Client)
    dijit.byId("dialog1").show()
    В документе на кнопке 2 пишем:
    Код (Text):
    (Server)
    viewScope.typesave="Fields2"
    (Client)
    [code]dijit.byId("dialog1").show()
    В диалоге на кнопке 1:
    Код (Text):
    DialogRresult( 1, viewScope.typesave)
    На кнопке 2:
    Код (Text):
    DialogRresult( 2, viewScope.typesave)
     
  8. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Я не сохраняю результат.
    Просто нужно знать действие пользователя
     
  9. Zeka

    Zeka Well-Known Member

    Регистрация:
    1 сен 2009
    Сообщения:
    219
    Симпатии:
    0
    Чего толкового сказать не могу, так просто поразглогольствую... :)
    ...в xPages другие принципы работы, неже ли в лотусе. Если ты будешь открывать диалок явой (SSJS) то твой код должен дойти до конца, что бы сервер смог построить всё дерево компонентов и вернуть html клиенту. Он не может "подвиснуть" где-то по середине и дождаться ответа клиента.

    Если же ты открываешь диалог при помощи CSJS, то опять таки, код зависящий от ответа пользователя должен писаться не в следующих за dijit.byId("dialog1").show() строчках, а передоваться в допиленный диалог как callback function
     
  10. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Я вопрос решил. Смотри описание выше
     
Загрузка...
Похожие Темы - Модальные Диалоги
  1. lionk
    Ответов:
    11
    Просмотров:
    2.605
  2. NickProstoNick
    Ответов:
    2
    Просмотров:
    1.321
  3. NickProstoNick
    Ответов:
    1
    Просмотров:
    1.749
  4. pbnoob
    Ответов:
    4
    Просмотров:
    3.456

Поделиться этой страницей