Фильтр по дереву или вложенным данным - PullRequest
0 голосов
/ 10 февраля 2020

Я видел в одном из вопросов «Фильтр по дереву или вложенным данным # 1562» Оли упоминал, что

Hey @ fr0z3nfyr Фильтрация поддерживается на дочерних узлах дерева начиная с версии 4,2 Cheers Oli:)

Я не могу найти ни одного примера или кода для поиска во вложенных данных. Мой код прекрасно работает для плоских таблиц, но для вложенных таблиц он работает только для узла root.


            //data - the data for the row being filtered
            //filterParams - params object passed to the filter

            var match = false;
            for (var key in data) {

                if (data[key] != null) {
                    if ((data[key]).indexOf(filterParams.value) != -1) {
                        match = true;
                    }
                }

            }

            return match;
        }
        function updateFilter(){

            if ($("#filter-field").val() == "All Columns") {
                table.setFilter(matchAny,{ value:  $("#filter-value").val()});
            } else {
                table.setFilter($("#filter-field").val(), "like", $("#filter-value").val());
            }
            //var filter = $("#filter-field").val() == "All Columns" ? matchAny : $("#filter-field").val() ;

        }```



Oli could you please point me to an example where Nested data filtering is supported

1 Ответ

0 голосов
/ 18 февраля 2020

Мне удалось решить эту проблему, но путем переустановки данных таблицы с отфильтрованным значением, а также древовидной структуры не поддерживается в отфильтрованном списке. Я могу поддерживать древовидную структуру с некоторыми изменениями в коде, но эта квартира больше похожа на то, что мне было нужно после выполнения фильтрации.

// Этот метод выполняет итерацию по dataRows и его дочерним элементам дерева и вызывает рекурсивную функцию, которая создает отфильтрованные данные таблицы.

function updateFilter() {

            var filtertableData = [];
            table.getRows().filter(function (row) {
                var rootData = row.getData();
                rootData._children = [];
                matchData(rootData, filtertableData);

                var childRows = row.getTreeChildren();
                searchForChildRows(rootData,childRows,filtertableData);
                 while (childRows.length != 0) {
                    for (var i = 0; i < childRows.length; i++) {
                        var childrow = childRows[i];
                        var childData = childrow.getData();
                        childData._children = [];
                        childRows = childrow.getTreeChildren();
                        searchForChildRows(childData,childRows,filtertableData); 

                    }
                }



            });

           table.setData(filtertableData);
        }

function matchData(rootData, filtertableData, childdata) {
        if (typeof childdata === "undefined") {
            for (var key in rootData) {
                console.log(key);
                console.log(allVisibleCBSCols);
                if (rootData[key] != null && typeof rootData[key] == 'string' && allVisibleCBSCols.includes(key)) {
                    if ((rootData[key]).indexOf($("#filter-value-Project").val()) != -1) {

                        filtertableData.push(rootData);
                        break;
                    }
                }

            }
        } else {
            for (var key in childdata) {
                if (childdata[key] != null && typeof childdata[key] == 'string' && allVisibleCBSCols.includes(key)) {
                    if ((childdata[key]).indexOf($("#filter-value-Project").val()) != -1) {
                        //rootData._children.push(childdata);
                        filtertableData.push(childdata);
                        break;
                    }
                }

            }
        }
    }



 function searchForChildRows(rootData,childRows,filtertableData) {
        for (var i = 0; i < childRows.length; i++) {
             var childrow = childRows[i];
             var childData = childrow.getData();
             childData._children = [];
             matchData(rootData,filtertableData,childData);

        }
    }
...