查看代码,我还没有完全弄清楚 NVD3 的lineWithFocusChart是如何创建焦点窗口的,但我相信它是通过在侧面制作两个矩形来实现的。我的问题是,当一个焦点窗口边界碰到取景器的一侧时,它怎么能触发一些事件 - 即。所以你可以加载更多数据?
例如,目前,我让它加载一个月的数据,并希望它在取景器到达左边距时再加载一个月。
我试图在 onBrush() 函数的 nv.d3.js 源代码中触发一个事件:
function onBrush() {
brushExtent = brush.empty() ? null : brush.extent();
var extent = brush.empty() ? x2.domain() : brush.extent();
//The brush extent cannot be less than one. If it is, don't update the line chart.
if (Math.abs(extent[0] - extent[1]) <= 1) {
return;
}
if (extent[1] !== x2.domain()[1] && extent[0] === x2.domain()[0]) //my attempt
console.log("Wheaton!"); // my attempt - do something here
dispatch.brush({extent: extent, brush: brush});
updateBrushBG();
// Update Main (Focus)
var focusLinesWrap = g.select('.nv-focus .nv-linesWrap')
.datum(
data
.filter(function(d) { return !d.disabled })
.map(function(d,i) {
return {
key: d.key,
values: d.values.filter(function(d,i) {
return lines.x()(d,i) >= extent[0] && lines.x()(d,i) <= extent[1];
})
}
})
);
所以,现在问题变成了,如果这样做,也许这不是正确的方法,我如何通知其他程序这个事件已经发生,以便它可以加载更多数据?