Могут ли pagerControls иметь события onclick?

#xpages #pager

#xpages #пейджер

Вопрос:

У меня есть динамическое представление, которое суммирует то, что отображается на экране, используя переменную viewScope, и я хочу, чтобы она сбросила мою переменную viewScope. Это не так, и, похоже, он не выполняет какой-либо скрипт, который я туда вставил.

 <xp:pager partialRefresh="true" id="upperPager"
for="viewRowRepeat" styleClass="tsDynamicViewPager" pageCount="8"
alwaysCalculateLast="true">
<xp:pagerControl id="pagerControl4" type="First">
    <xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="viewRowRepeat">
        <xp:this.action><![CDATA[#{javascript:dBar.info("pagerControl4 clicked");
clearColumnTotals();}]]></xp:this.action>
            <xp:this.script><![CDATA[alert("Clicked!");]]></xp:this.script>
        </xp:eventHandler>
    </xp:pagerControl>
    <xp:pagerControl id="pagerControl5" type="Group">
        <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
            <xp:this.action><![CDATA[#{javascript:dBar.info("pagerControl5 clicked");
clearColumnTotals();}]]></xp:this.action>
            <xp:this.script><![CDATA[alert("Clicked!");]]></xp:this.script>
        </xp:eventHandler>
    </xp:pagerControl>
    <xp:pagerControl id="pagerControl6" type="Last">
        <xp:eventHandler event="onclick"
            submit="true" refreshMode="complete">
            <xp:this.action><![CDATA[#{javascript:dBar.info("pagerControl6 clicked");
clearColumnTotals();}]]></xp:this.action>
            <xp:this.script><![CDATA[alert("Clicked!");]]></xp:this.script>
        </xp:eventHandler>
    </xp:pagerControl>
</xp:pager>
 

Излишне говорить, что я не знаю, правильно ли я это закодировал или не должно быть никакого события onclick для pagerControls. Я знаю, что IDE не показывает их для самих пейджеров.

Комментарии:

1. Если вы не можете заставить onlick работать, возможно, вы могли бы создать клиентский скрипт, который выполняет вызов ajax при нажатии кнопки пейджера, чтобы перенаправить на XAgent, который обновляет вашу переменную viewScope и перенаправляет обратно на текущую страницу. Кажется, это большая проблема, но если это то, что вам нужно сделать…

2. Но проблема в том, что я не могу заставить что-либо запускать onclick для pagercontrol. Ничего в CSJS или SSJS.

3. Вы можете с помощью jQuery, если с кнопкой пейджера связан класс. Например, поместите это диапазон с классом «pleaseWork», затем в jQuery выберите все кнопки внутри всех диапазонов с классом .pleaseWork (вы можете быть очень детализированы с помощью селекторов jQuery), а затем создайте функцию, которая запускает ваш вызов ajax при нажатии кнопки. Загружайте это при загрузке страницы. Это должно быть возможно, потому что однажды на странице все элементы управления являются просто частью DOM. Подсказка: сначала заставьте его работать, создав сообщение с предупреждением («вы нажали на меня») при нажатии, затем поработайте над частью ajax.

Ответ №1:

Подключите элементы управления пейджером к onclick событию Dojo для выполнения кода на стороне клиента при нажатии на элемент управления пейджером:

 <xp:eventHandler
    event="onClientLoad"
    submit="false">
    <xp:this.script><![CDATA[
        dojo.query(".xspFirst").forEach(function(node) {
          dojo.connect(node, "onclick", function() { 
               alert("First clicked");
          });
        });
        dojo.query(".xspGroup").forEach(function(node) {
          dojo.connect(node, "onclick", function() { 
               alert("Group clicked");
          });
        });
        ...
    ]]>
    </xp:this.script>
</xp:eventHandler>
 

Классы, отображаемые для элементов управления пейджером, имеют тип «xsp» , например «xspFirst», «xspGroup» и «xspLast». Используйте эти классы для получения элементов управления.