根据缩放事件更改amChart Serial中的dataProvider

change dataProvider in amChart Serial based on zoom event

本文关键字:amChart Serial 中的 dataProvider 缩放 事件      更新时间:2023-09-26

我正试图根据缩放级别更改与amChart Serial图形关联的数据提供程序。思路很简单:我有两组数据,每小时的值代表一年中每小时的值,每天的值代表每一天的值。我从每日精度开始,当用户缩放到35天以下时,我想切换到每小时精度。

这是监听器

chart.addListener("zoomed", function (event) {
    if (event.endDate - event.startDate > 3000000000 && chart.dataProvider == dataHourly) {
        chart.dataProvider = dataDaily;
    }
    else if (event.endDate - event.startDate <= 3000000000 && chart.dataProvider == dataDaily) {
        chart.dataProvider = dataHourly;
    }
    // now I need to "commit"
}

这部分工作正常,现在我需要更新图表。要使用的函数应该是

chart.validateData();
chart.animateAgain();

问题是,一旦我尝试应用dataHourly dataProvider,缩放被重置,所以它回到一个值> 3000000000和dataDaily被重新应用。我需要在事件中手动设置startDateendDate,但是……我该怎么办?是否有类似这样(不能工作)的代码?

// now I need to "commit"
chart.startDate = event.startDate;
chart.endDate= event.endDate;
chart.validateData();
chart.animateAgain();

作为临时修复,我将chart.validateData();更改为chart.validateNow(true, true);。它可以防止事件传播,但我在缩小时遇到了故障。

无论如何,支持帮助我找到了正确的方法来防止缩放复位处理也dataUpdated事件,而不是停止所有事件的传播。下面是一个工作示例,其中正确管理dataUpdated事件以避免缩放重置(当然也需要正确处理zoomed事件以正确设置chart.ignoreZoomEvent)