Решено Формулы скрытия и datasource

Тема в разделе "Lotus - Xpages", создана пользователем motogarri, 9 сен 2015.

  1. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Привет. Помогите плс разобаться.
    На странице имеется датасорс и панель с несколькими репит-контролами. Репиты отображают наборы полей из документа, типа:
    FirstName_1, LastName_1, MiddleName_1
    FirstName_2, LastName_2, MiddleName_2
    . . . . . . . . . . .
    FirstName_15, LastName_15, MiddleName_15

    В документе нет поля, которое показало бы сколько имён присутствует в таблице, значит нужно вычислять самому
    Код (Javascript):
    var n = 0;
    for (var i = 1; i <= 16; i++) {
        if(datasource1.hasItem("FirstName_" + i) || datasource1.hasItem("LastName_" + i) || datasource1.hasItem("MiddleName_" + i)){
            var fname = datasource1.getItemValueString("FirstName_" + i);
            var lname = datasource1.getItemValueString("LastName_" + i);
            var mname = datasource1.getItemValueString("MiddleName_" + i);
            if(lname + fname + mname != "") n += 1;
        }
    }
    return n;
    Получается этот цикл нужно выполнять на вычислении количества строк репита и в формуле скрытия таблицы в которую помещён репит.

    Наверняка же можно вычислить количество строк только один раз на каком-нибудь событии датасорса и передать через viewScope? Только вот на какое бы событие датасорса я бы ни вешал вычисление, либо 'datasource1' not found, либо страница уже прорисовалась и скрытие не сработало.
     
    #1 motogarri, 9 сен 2015
    Последнее редактирование модератором: 9 сен 2015
  2. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    у репитера есть метод getRowCount()
    А вопрос отсеивания пустых записей решается на уровне datasource

    А чтоб подсказать куда надо вешать обработку - нужно знать цель задачи.
     
  3. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Цель - отобразить xp:table в которой есть репит-контрол. То-есть мне надо скрывать всю таблицу, если репит пустой. Если на таблице вычислять условие скрытия вот так: getComponent("repeat1").getRowCount() > 0 ? true : false , то получается 'getComponent()' is null. Хотя поле в ячейке таблицы отображает количество строк в репите верно.
     
  4. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Наверное потому что репит дочерний элемент по отношению к таблице, не знаю. Потому хотел сначала посчитать количество строк в датасорсе и передать его в репит.
     
  5. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Таблицу я использую для заголовков к данным в репите. Может я вообще не так делаю? Может как-то по другому можно?
     
  6. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    когда вычислять, может еще сам контрол не сформирован, в этом месте процесса
    [DOUBLEPOST=1441807771,1441807652][/DOUBLEPOST]смотрим http://codeby.net/forum/threads/39346/#post-257826 lifecycle - очень полезная БД для понимания (и описание в ТМ)
     
  7. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Ну как вариант - можно получить коллекцию по виду и посмотреть сколько строк в результате
     
  8. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Всё, допёрло до меня. Там оказывается можно вот такую штуку вставить:
    Код (HTML5):
    <xp:this.facets>
        <xp:text disableTheme="true" xp:key="header" escape="false">
            Таблица с заголовками
        </xp:text>
    </xp:this.facets>
    Тогда таблица станет дочерней к репит-контролу и все будет нормально скрываться:
    Код (HTML5):
    <xp:this.rendered><![CDATA[${javascript:
        this.getRowCount() > 1 ? true : false}]]>
    </xp:this.rendered>
     
  9. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    не понял.... ты в репитер вставил таблицу?
     
  10. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Да, хедером таблицу вставил
     
  11. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Код (HTML5):

    <xp:repeat id="repeat3" first="1" indexVar="index" style="margin-top:5px">
        <xp:this.facets>
            <xp:text disableTheme="true" xp:key="header" escape="false">
                <xp:table style="width:100%">
                    <xp:tr>
                        <xp:td style="color:rgb(0,0,128);font-weight:bold">
                            Заголовок
                        </xp:td>
                    </xp:tr>
                </xp:table>
            </xp:text>
    </xp:this.facets>
     
     
  12. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Немного не правильно. Это в каждой строке репитера будет рисоваться таблица.
    И будут проблемы с изменением ширины столбцов. В разных строках репитера ширина одного и того же столбца может отличаться.
    Лучше сделать так

    Код (HTML5):
     <xp:table>
        <xp:tr>
            <xp:td>Заголовок1</xp:td>
            <xp:td>Заголовок2</xp:td>
        </xp:tr>
        <xp:repeat id="repeat1" rows="30" value="#{view1}">
            <xp:tr>
                <xp:td></xp:td>
                <xp:td></xp:td>
            </xp:tr>
        </xp:repeat>
    </xp:table>
     
    #12 NickProstoNick, 10 сен 2015
    Последнее редактирование модератором: 10 сен 2015
Загрузка...
Похожие Темы - Формулы скрытия datasource
  1. Луиза
    Ответов:
    3
    Просмотров:
    368
  2. Dimok-163rus
    Ответов:
    0
    Просмотров:
    953
  3. KatyaVm22
    Ответов:
    14
    Просмотров:
    3.608
  4. Xatiko
    Ответов:
    1
    Просмотров:
    1.507
  5. lmike
    Ответов:
    2
    Просмотров:
    2.390

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