Vaadin 8 Charts Timeline,如何实现延迟加载值

时间:2018-05-04 09:20:28

标签: java lazy-loading vaadin8 vaadin-charts

问题说明

上下文

我正在尝试使用Vaadin Charts可视化大型X-Y值数据集。 我希望能够懒得加载由于数据集很大而将加载的值。这可以通过设置修复窗口并允许用户更改日期来实现。因此,如果用户通过RangeSelector选择startDate和endDate,则只应加载这些值。

当前方法

每个点都建模为:

public final class TimestampedDoubleValue{
         private final long timestampInMillis;
         private final long value; 

         public TimestampedDoubleValue(long timestampInMillis,long value){
            this.value=value;
            this.timestampInMillis=timestampInMillis;
         }

         public final long getTimestampInMillis {return timestampInMillis;}
         public final long getValue {return value;}

}

我尝试遵循类似于Vaadin Grid中用于实现延迟加载的方法。 https://vaadin.com/blog/lazy-loading-with-vaadin-8

为了实现延迟加载,我创建了一个DataProvider和一个基于DataProvider的SeriesDataProvider。

但是我在图表中找不到任何关于延迟加载的文档或示例。我在DataProvider和SeriesDataProvider上找到了一些注释,但是他们没有明确提到延迟加载。示例中显示的ListDataProvider是内存解决方案,没有延迟加载。 https://vaadin.com/docs/v8/charts/java-api/charts-getting-started.html

此外,我无法确定此方法是否可用于延迟加载,以及是否可以使用Java API在Vaadin Charts Timeline中进行延迟加载。

例如,DataProviderSeries Javadoc具体说明如下:

  

请注意,即使您使用延迟加载DataProvider,此系列也会以热切的方式工作,并立即从提供程序加载所有数据。

https://demo.vaadin.com/javadoc/com.vaadin/vaadin-charts/4.0.1/com/vaadin/addon/charts/model/DataProviderSeries.html

public class TimeseriesDataProvider<F> extends AbstractBackEndDataProvider<TimestampedDoubleValue, F> {

public final DataProviderSeries<TimestampedDoubleValue> getDataProviderSeries() {
    final DataProviderSeries<TimestampedDoubleValue> dataProviderSeries = new DataProviderSeries<>(this);
    dataProviderSeries.setX(TimestampedDoubleValue::getTimestampInMillis);
    dataProviderSeries.setY(TimestampedDoubleValue::getValue);
    dataProviderSeries.setAutomaticChartUpdateEnabled(true);

    return dataProviderSeries;
}

 /*
 * @see com.vaadin.data.provider.DataProvider#isInMemory()
 */
@Override
public final boolean isInMemory() {
    return false;
}

/*
 * @see com.vaadin.data.provider.AbstractBackEndDataProvider#fetchFromBackEnd(com.vaadin.data.provider.Query)
 */
@Override
protected Stream<TimestampedDoubleValue> fetchFromBackEnd(final Query<TimestampedDoubleValue, F> query) {
   return FetchService.streamResults();

}

/* 
 * @see com.vaadin.data.provider.AbstractBackEndDataProvider#sizeInBackEnd(com.vaadin.data.provider.Query)
 */
@Override
protected int sizeInBackEnd(final Query<TimestampedDoubleValue, F> query) {
            return FetchService.countInBackend();
}

}

问题

  1. 是否可以在时间轴中使用延迟加载,如果是,如何? DataProviderSeries的存在及其与DataProvider的连接表明它是。但是,DataProviderSeries的Javadoc建议不然。 (见上文)。

  2. 在DataProvider系列中,有一个过滤器(上面代码中的F类型),它作为参数在查询中传递。如何引入过滤器以便将其作为参数传递?

0 个答案:

没有答案