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

change dataProvider in amChart Serial based on zoom event

我正在尝试更改与基于缩放级别的 amChart 序列图相关联的 dataProvider。这个想法很简单:我有 2 组数据,每小时有一个值代表一年中的每个小时,每天有一个值代表每一天。我从日精度开始,当用户缩放到 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 事件而不是停止所有事件传播来防止缩放重置的正确方法。 HERE 是一个工作示例,其中事件 dataUpdated 得到妥善管理以避免缩放重置(当然 zoomed 事件也需要妥善处理以正确设置 chart.ignoreZoomEvent