Расширяемые подсетки в зависимости от условия - PullRequest
0 голосов
/ 05 июля 2019

У меня есть сетка с подсетями (дедушка, родитель, дочерние отношения).

Есть ли способ установить определенные строки в расширяемые / не расширяемые в зависимости от условия?

Например, у всех бабушек и дедушек есть дети (родители), а у некоторых родителей есть дети, а у других нет. Есть ли способ сделать так, чтобы эти родители без детей не расширялись в jqgrid? Я смотрел на атрибут onSubgridBeforeExpand , но это только предотвратит расширение подсетки. Я не хочу вводить пользователей в заблуждение, полагая, что сетка должна быть расширяемой, когда на самом деле это не так (нажатие кнопки «плюс», а затем ничего не происходит, может сбить с толку imo). В худшем случае я могу использовать этот атрибут, чтобы отобразить что-то, в котором говорится, что дочерних элементов нет, но я бы хотел этого избежать, если это возможно.

Заранее спасибо, и вот мой JSP с сеткой в ​​нем. Я не верю, что Struts.xml или классы действий необходимы для этого типа вопросов, но если вы укажете причину, по которой они могут понадобиться, я могу поделиться ими.

<%@ page contentType="text/html; charset=UTF-8"%>

<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<%@ taglib prefix="sjg" uri="/struts-jquery-grid-tags" %>

<s:form id="getJunctionInstance" name="getJunctionInstance" action="populateJI" targets="#gridtable" method="post">
    <input hidden="true" name="rpName" id="rpName"/>
</s:form>

<s:form id="getServerHealth" name="getServerHealth" action="populateSH" targets="#gridtable2" method="post">
    <input hidden="true" name="jiName" id="jiName"/>
</s:form>

<script>
$.subscribe("getJunctionInstance",function(event){
    let row_id = event.originalEvent.row_id;
    document.forms['getJunctionInstance'].elements['rpName'].value = row_id;
    //document.forms['getJunctionInstance'].submit();
    //Don't submit the form, as it is submitted when onSubGridRowExpanded for gridtable is called
});

$.subscribe("getServerHealth",function(event) {
    let row_id = event.originalEvent.row_id;
    document.forms['getServerHealth'].elements['jiName'].value = row_id;
});
</script>

<s:url var="remoteurl" action="updateRP"/>
<s:url var="junctionInstanceJson" action="updateJIJson"/>
<s:url var="serverHealthJson" action="updateSHJson"/>
<sjg:grid
    id="gridtable"
    caption="Reverse Proxy List"
    dataType="json"
    href="%{remoteurl}"
    pager="true"
    gridModel="proxies"
    rowList="10,15,20"
    rowNum="20"
    rownumbers="true"
    onSubGridRowExpanded="getJunctionInstance"
    height="600"
    width="900"
    loadonce="true"
>
    <sjg:grid
        id="gridtable2"
        caption="Junction Instance List"
        dataType="json"
        subGridUrl="%{junctionInstanceJson}"
        pager="true"
        gridModel="junctionInstance"
        formIds="getJunctionInstance"
        reloadTopics="getJunctionInstance"
        rowList="10,15,20"
        rowNum="20"
        rownumbers="false"
        onSubGridRowExpanded="getServerHealth"
        width="700"
        loadonce="true"
    >
        <sjg:grid
            id="gridtable3"
            caption="Server Health List"
            dataType="json"
            subGridUrl="%{serverHealthJson}"
            pager="true"
            gridModel="serverInstance"
            formIds="getServerHealth"
            reloadTopics="getServerHealth"
            rowList="10,15,20"
            rowNum="20"
            rownumbers="false"
            width="500"
            loadonce="true"
        >
            <sjg:gridColumn name="name" index="name" title="Name" key="true" hidden="true" sortable="false"/>
            <sjg:gridColumn name="label" index="label" title="Label" sortable="true"/>
            <sjg:gridColumn name="health" index="health" title="Health" formatter="integer" sortable="true"/>
        </sjg:grid>

        <sjg:gridColumn name="name" index="name" title="Name" key="true" hidden="true" sortable="false"/>
        <sjg:gridColumn name="label" index="label" title="Label" sortable="true"/>
        <sjg:gridColumn name="health" index="health" title="Health" formatter="integer" sortable="true"/>
    </sjg:grid>

    <sjg:gridColumn name="name" key="true" index="name" title="Name" hidden="true" sortable="false"/>
    <sjg:gridColumn name="label" index="label" title="Label" sortable="true"/>
    <sjg:gridColumn name="health" index="health" title="Health" formatter="integer" sortable="true"/>
</sjg:grid>

Does anyone know if this type of conditioning is possible with jqgrid?

1 Ответ

0 голосов
/ 23 июля 2019

Ну, это заняло некоторое время, но после того, как я наткнулся на этот ТАК сегодня, я наконец понял это.Я добавил опцию onCompleteTopics к каждой сетке, с разными формами отправки для каждого.Затем я использовал функцию javascript, чтобы подписаться на эти представления формы и выполнить логику.Я использовал event.originalEvent, чтобы получить информацию для извлечения row_ids, которая отвечала моим критериям нежелания подсетки, а метод, предложенный в посте, позаботился обо всем остальном!Слава этому парню!

...