如何在不调用 API 的情况下在 vaadin 23 网格中排序

问题描述 投票:0回答:1

我正在使用 Vaadin 23 并尝试执行排序。但是,要求是在 UI 上对获取的元素进行排序,而不是调用后端。

这是参考代码

设置后端数据提供者

    @Override
    protected Stream<MyClassWrapper> fetchFromBackEnd(Query<MyClassWrapper, MyFilter> query) {
        MyFilter initFilter = MyFilter.builder().build();
        Stream<MyClass> stream = myService.getData(initFilter).stream();
        Stream<MyClassWrapper> wrapperStream = stream.map(MyClassWrapper::new).sorted();
        return wrapperStream;
    }

网格创建

    public class MyGridComponent extends Grid<MyWrapper> {

        public MyGridComponent() {
            super(MyWrapper.class, false);

            addColumn(MyWrapper::getName)
                    .setHeader("Column1")
                    .setSortable(true)
                    .setComparator(MyWrapper::getColumn1)
                    .setId("my-grid-column-name");
        }
    }   

我在列上尝试了 setComparator(),但它正在调用 API。任何线索将不胜感激。

vaadin vaadin-flow vaadin-grid vaadin23 vaadin-spring-boot
1个回答
0
投票

Backend-DataProviders 的全部意义在于,并非所有数据库项都需要急切加载。但是,当您对列表进行排序或过滤时,排序/过滤应该应用于所有列表,因此需要调用该服务。

您必须使用像 ListDataProvider 这样的内存数据提供程序,并从数据库/服务中加载所有项目。只有经过排序和过滤后才不会调用任何服务。

© www.soinside.com 2019 - 2024. All rights reserved.