Вопрос О Диалогах

Тема в разделе "Lotus - Xpages", создана пользователем roddm, 12 мар 2014.

  1. roddm

    roddm New Member

    Регистрация:
    4 ноя 2011
    Сообщения:
    4
    Симпатии:
    0
    По нажатию кнопки выполняется CSJS, в котором при некоторых условиях необходимо открыть диалог.
    После этого (независимо от открытия или НЕ открытия диалога) необходимо выполнить SSJS.
    Однако XSP.openDialog() не желает открывать диалог.
    Подскажите, plz, в чем может быть проблема (Кнопка 1 примера).

    Примерчик:

    Код (Text):
    <?xml version="1.0" encoding="UTF-8"?>
    <xp:view xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xe="http://www.ibm.com/xsp/coreex">
    <xp:button value="Кнопка 1" id="button1">
    <xp:eventHandler event="onclick" submit="true"
    refreshMode="complete">
    <xp:this.action><![CDATA[#{java script:if (viewScope.ReestrAnswer == "")
    {
    // Выполняем дальнейшие действия ...
    viewScope.ReestrAnswer = "777"
    }
    }]]></xp:this.action>
    <xp:this.script><![CDATA[var rez = XSP.getElementById("#{id:ReestrAnswer}").value

    if (rez == "" || rez == "777")
    {
    XSP.openDialog("#{id:dialog1}");
    }   ]]></xp:this.script>
    </xp:eventHandler>
    </xp:button>

    <xp:button value="Кнопка 2" id="button3">
    <xp:eventHandler event="onclick" submit="false">
    <xp:this.script><![CDATA[var rez = XSP.getElementById("#{id:ReestrAnswer}").value

    if (rez == "" || rez == "777")
    {
    XSP.openDialog("#{id:dialog1}");
    }   ]]></xp:this.script>
    </xp:eventHandler>
    </xp:button> <xp:inputText id="ReestrAnswer" value="#{viewScope.ReestrAnswer}"></xp:inputText>
    <xp:br></xp:br>
    <xe:dialog id="dialog1" title="Ввод данных">
    <xe:dialogContent id="dialogContent1">
    <xp:table>
    <xp:tr>
    <xp:td><xp:label value="Поле 1:" id="label3" style="color:rgb(0,0,128)">
    </xp:label></xp:td>
    <xp:td>
    <xp:inputText id="inputText1"></xp:inputText></xp:td>

    </xp:tr>
    <xp:tr>
    <xp:td><xp:label value="Поле 2:" id="label1" style="color:rgb(0,0,128)">
    </xp:label></xp:td>
    <xp:td>
    <xp:inputText id="inputText2"></xp:inputText></xp:td>

    </xp:tr>
    <xp:tr>
    <xp:td></xp:td>
    <xp:td><xp:button id="button2" value="Сохранить">
    <xp:eventHandler event="onclick" submit="true"
    refreshMode="complete" id="eventHandler3">
    <xp:this.action><![CDATA[#{java script:viewScope.ReestrAnswer = "1"
    getComponent('dialog1').hide()}]]></xp:this.action>
    </xp:eventHandler>
    </xp:button> <xp:button value="Отменить" id="button4">
    <xp:eventHandler event="onclick" submit="true"
    refreshMode="complete">
    <xp:this.action><![CDATA[#{java script:viewScope.ReestrAnswer = "0"
    getComponent('dialog1').hide()}]]></xp:this.action>
    </xp:eventHandler></xp:button></xp:td>

    </xp:tr>
    </xp:table></xe:dialogContent></xe:dialog>
    </xp:view>
     
  2. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    хм... а дизайнер не "говорит" об ошибках?
    1. не совсем ясно что такое "java script"
    2. в кнопке не работает потому что совмещаешь SSJS и CSJS. Для того чтоб открылся диалог - на стороне SSJS не должно быть сабмита и рефреша.
    Вызывать диалог можно по событию кнопки onStart или onComplete. Возникают когда уже состоялось нажатие на кнопку.
    onStart - возникает перед рефрешем
    onComplete - после рефреша

    Так же можно разнести код между страницей и диалогом.
    Так же можно передать кнопке в диалоге определенный код.
    Главное хорошо подумать
     
  3. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    >"java script"
    замечала, что так наш форум преобразует этот слово в хтмл - думаю, можно забить
     
  4. roddm

    roddm New Member

    Регистрация:
    4 ноя 2011
    Сообщения:
    4
    Симпатии:
    0
    Дизайнер говорит - все Ок.
    Нельзя совмещать SSJS и CSJS ?
    В следующем примере по нажатию кнопки сначала выполняется CSJS, а затем SSJS. И рефреш срабатывает чтобы открылся диалог из под SSJS.
    Непонятно чем мешает рефреш на стороне SSJS открытию диалога из CSJS ?
    Код (Text):
    <xp:button value="Кнопка 3" id="button5">
    <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
    <xp:this.script><![CDATA[alert("CSJS")]]></xp:this.script>
    <xp:this.action><![CDATA[#{java script:facesContext.getViewRoot().postScript('alert("SSJS!")')
    getComponent('dialog1').show()}]]></xp:this.action>
    </xp:eventHandler>
    </xp:button>
    Код должен быть на странице, т.к. диалог открывается не всегда, а при некоторых условиях.
     
  5. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    В первом примере у тебя диалог открывается CSJS
    Во втором примере - SSJS.
    Разницу замечаешь?

    Строй правильно логику кода.
    Основной код зависит от значений диалога?
     
  6. roddm

    roddm New Member

    Регистрация:
    4 ноя 2011
    Сообщения:
    4
    Симпатии:
    0
    Разницу понимаю. Я имел в виду что после CSJS вполне может отрабытывать SSJS.
    Просто непонятно чем SSJS с рефрешем может мешать вызову диалога из CSJS ?
    Ведь сначала отрабатывает CSJS c вызовом диалога, и только после этого SSJS с рефрешем. И кстати все работает.
    Кроме вызова XSP.openDialog("#{id:dialog1}") из CSJS. Такое впечатление что Domino просто не хочет выполнять эту команду и пропускает ее.
    В основном коде ПРИ некоторых условиях может вызываться диалог (для ввода дополнительных данных) и обрабатываться его результаты (в основном коде - если диалог был открыт). Открывать диалог ДО вызова основного кода - бессмысленно.
     
  7. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    потому что XSP.openDialog() и XSP.closeDialog() требуют частичного обновления! Конфликтуют они с обновлением, которое вызывается серверным событием!!!

    И правильно я понимаю? Планируется такой порядок выполнения кода одной кнопки:
    CSJS кнопки вызывает диалог
    SSJS выполняет часть кода и ждет данных диалога.
    Диалог закрывается и SSJS продолжает работать?

    Сделаете - расскажите как!

    Добавлено: То как планируется сделать - работать не будет.
    По извращаться конечно можно. Но зачем?
    Правильно построй логику и все.
    Можно обойтись только SSJS. На кнопку "Ок" диалога можно навесить код, который продолжит код основной кнопки.
    Причем этот код модно навесить прямо из основной кнопки. Только ни в коем случае не надо делать циклов с пред/пост условием.
     
Загрузка...
Похожие Темы - Вопрос Диалогах
  1. Генералл
    Ответов:
    2
    Просмотров:
    56
  2. ApplePen
    Ответов:
    0
    Просмотров:
    58
  3. gURaBA_N
    Ответов:
    3
    Просмотров:
    92
  4. ghost
    Ответов:
    1
    Просмотров:
    86
  5. kartaman
    Ответов:
    0
    Просмотров:
    127

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