Исключение TreeGrid js "TypeError: Невозможно прочитать свойство 'длина' из неопределенного", когда число дочерних узлов превышает 50 - PullRequest
0 голосов
/ 16 января 2019

У меня есть простая TreeGrid в рамках Vaadin.Когда я раскрываю узел в дереве с 50 или более дочерними объектами - исключение отчета javascript.И только первые 50 узлов отображаются правильно, вместо 51 узла я вижу первый, вместо 66 я вижу 16, вместо 107 - 7 и т. Д.

Я пробовал с Vaadin 12.0.0, 12.0.3,13.0.0.alpha2

Я запускаю его из Gradle с плагином 'com.devsoap.vaadin-flow' версия '1.0.0.RC6'

Вот простой пример для воспроизведения.

import com.vaadin.flow.component.treegrid.TreeGrid;
import com.vaadin.flow.data.provider.hierarchy.AbstractHierarchicalDataProvider;
import com.vaadin.flow.data.provider.hierarchy.HierarchicalQuery;

import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class MyTreeGrid extends TreeGrid<MyTreeGrid.Node> {

private static final int CHILD_SIZE = 200;

public MyTreeGrid() {

    this.addHierarchyColumn(Node::getName);

    setDataProvider(new AbstractHierarchicalDataProvider<MyTreeGrid.Node, Void>() {
        @Override
        public boolean isInMemory() {
            return false;
        }

        @Override
        public int getChildCount(HierarchicalQuery<MyTreeGrid.Node, Void> query) {
            Object node = query.getParent();

            if (node == null)
                return 1;

            if (node instanceof RootNode)
                return CHILD_SIZE;

            return 0;

        }

        @Override
        public Stream<MyTreeGrid.Node> fetchChildren(HierarchicalQuery<MyTreeGrid.Node, Void> query) {
            Node node = query.getParent();
            if (node == null) {
                return Stream.of(new RootNode(0));
            } else {
                Stream<Node> nodeStream = IntStream.range(1, CHILD_SIZE + 1).mapToObj(Node::new);
                Stream<Node> copy = IntStream.range(1, CHILD_SIZE + 1).mapToObj(Node::new);
                int size = copy.collect(Collectors.toList()).size();
                System.out.println(size);
                return nodeStream;
            }
        }

        @Override
        public boolean hasChildren(MyTreeGrid.Node node) {
            if (node == null)
                return true;

            return node instanceof RootNode;
        }
    });

}

public static class Node {
    private final int num;
    public Node(int num) {
        this.num = num;
    }
    public String getName() {
        return "Node " + num;
    }
}

public static class RootNode extends Node {
    public RootNode(int num) {
        super(num);
    }
    public String getName() {
        return "RootNode";
    }
}


}
...