Как группировать записи при рендеринге в HTML - PullRequest
0 голосов
/ 08 марта 2019

У меня есть набор записей, которые извлекаются из серверной части и возвращаются сгруппированными по категориям с использованием кода JavaScript.

На самом деле эти записи просто отображаются в HTML путем объединения строк, как показано ниже:

Знание знаний № 1 - Краткое описание - Знание категории 1 знаний № 2 - Краткое описание - Знание знаний категории 2 № 3 - Краткое описание - Знание знаний № 4 категории 1 - Краткое описание - Знание знаний 5-й категории 5 - Краткое описание - Знание знаний 6-й категории № 6- Краткое описание - Знание категории 7, КБ № 7 - Краткое описание - Категория5

То, что я пытаюсь представить, представляет собой набор записей, представленных выше, в HTML, как показано ниже:

Категория1 : база знаний № 1 - краткое описание база знаний № 3 - краткое описание

Категория 2: база знаний № 2 - краткое описание

Категория 5: Знание КБ № 4 - Краткое описание Знание КБ № 7 - Шорt описание

Категория 6: Знание № 5 - Краткое описание

Категория 7: Знание № 6 - Краткое описание

Как я могу отобразить свой HTML, чтобы Категория повторялась только один раз для каждой группы

Ниже приведен пример кода, который представляет их в объединенной строке:

GlideRecordSecure('u_kb_template_sharepoint_document');
                                               kb.addQuery('cmdb_ci',current.sys_id);
                                               kb.addQuery('latest',true);
                                               kb.orderBy('kb_category');
                                               kb.query();
                                               "/>

<j2:if test="$[kb.next()]" >
    <tr>
        <td class="label label_spacing">
            <span style="margin-right:3px; margin-left:1px;">$[SP]</span>
            ${gs.getMessage('Attached knowledge:')}
        </td>
        <td>
            <g2:evaluate>
                var hasMore = true;
                var category = kb.getDisplayValue('kb_category');
            </g2:evaluate>
            <j2:while test="$[hasMore]">
                <div>
                    <img src="images/nav_bult.gifx" alt="${gs.getMessage('Knowledge Base Article')}" />
                    <a class="obvious" target="_blank" href="$[kb.u_kb_url]">$[HTML:kb.number] - $[HTML:kb.short_description] - $[category]</a>
                </div>
                <g2:evaluate>
                    hasMore = kb.next();
                </g2:evaluate>
            </j2:while>
        </td>
    </tr>
</j2:if>

Как я могуобновить его для группировки, не узнал?

Обратите внимание, что этот скрипт является частью элемента Jelly из ServiceNow

спасибо

1 Ответ

0 голосов
/ 08 марта 2019

Прежде всего, это не проблема HTML, хотя вам, конечно, нужно подумать, как вы хотите визуально представить это. Т.е. результатом будет таблица с динамическими записями.

Теперь по основному вопросу - «Как показать категорию только один раз» - вам нужно сделать что-то подобное в javascript (псевдокод) - предположим, что «records» - это массив, содержащий эти 7 записей.

  • records.sort (по категориям) -> при условии, что строки еще не объединены, и вы можете получить доступ к категории как одной переменной
  • records.foreach (пункт) { сравнить предыдущий элемент с текущим если отличается, создайте новую строку HTML, напечатайте категорию (в противном случае оставайтесь в той же строке) если категории одинаковы, просто добавьте строку предыдущий элемент = элемент }

-> Таким образом, вы сортируете свои данные по «категориям», таким образом, они сгруппированы рядом с каждым в данных. Затем можно сравнить каждую запись со следующей, чтобы вы могли правильно выбрать логику для генерации соответствующего HTML.

...