gpt4 book ai didi

javascript - Dygraph的drawCallback中 "is_initial"何时为真?

转载 作者:行者123 更新时间:2023-11-28 01:31:26 25 4
gpt4 key购买 nike

当我提供数据源的文件 URL 时,我有一个 Dygraphs 图表,它可以完美地工作。然而,当我将数据直接嵌入到 HTML 包装器中时,drawCallback 中的函数不会触发。用Firebug跟踪,我发现is_initialTrue当我加载带有 URL 引用的页面时,但是 False当我以 native 格式嵌入数据(和标签)时,即使我放置 onLoad="drawCallback(vGraph,True);" <body>内标签。我通过设置自己的变量来测试首次执行来“解决”了这个问题。

这是外部数据源的原始功能代码:

var vGraph = new Dygraph(document.getElementById("dgraphChartContainer"),
ExternalDataSource.csv,
{ //options
connectSeparatedPoints: true,
labelsDiv: "dygraphLabelsContainer",
...
}
);

vGraph.updateOptions({
highlightCallback: function(event, xdate, points_array, rowNumber, seriesName) {
...
},
unhighlightCallback: function(event) {
...
},
drawCallback: function(g, is_initial) {
if (!is_initial) return;
buildTagList(vGraph.getLabels());
mySeriesColors = vGraph.getColors();
buildStyleDefinitions();
}
});

正如我所说,即使对于盲人来说,这也很有效 g drawCallback 中的参数。

这是我在嵌入数据源时针对该场景开发的解决方法。

var vFirstTime = true;
var vGraph = new Dygraph(document.getElementById("dgraphChartContainer"),
[
[ new Date("2011/10/15 00:04:55"),null,null,-9.2,null,null,null,null,null,null],
[ new Date("2011/10/24 10:39:32"),null,null,null,null,null,-9.2,null,null,null],
...
[ new Date("2011/10/25 21:02:30"),null,null,null,null,null,null,null,20.3,null],
[ new Date("2013/10/28 08:49:52"),null,null,-17.9,null,null,null,null,null,null]
],
{ //options
labels: ["Event_Date","code-32565","code-32566","code-32568","code-32569","code-32573","code-32574","code-32575","code-32577","code-32578"],
connectSeparatedPoints: true,
labelsDiv: "dygraphLabelsContainer",
...
}
);

vGraph.updateOptions({
highlightCallback: function(event, xdate, points_array, rowNumber, seriesName) {
...
},
unhighlightCallback: function(event) {
...
},
// drawCallback: function(g, is_initial) {
// if (!is_initial) return;
drawCallback: function() {
if (!vFirstTime) return;
buildTagList(vGraph.getLabels());
mySeriesColors = vGraph.getColors();
buildStyleDefinitions();
vFirstTime=false;
}
});

我可以做些什么来使用 is_initial在我的drawCallback无论数据源如何调用?

最佳答案

如果您将回调移至构造函数中,您的第一个示例将起作用:

var vGraph = new Dygraph(document.getElementById("dgraphChartContainer"),
ExternalDataSource.csv,
{ //options
connectSeparatedPoints: true,
labelsDiv: "dygraphLabelsContainer",
highlightCallback: function(event, xdate, points_array, rowNumber, seriesName) {
...
},
unhighlightCallback: function(event) {
...
},
drawCallback: function(g, is_initial) {
if (!is_initial) return;
buildTagList(vGraph.getLabels());
mySeriesColors = vGraph.getColors();
buildStyleDefinitions();
},
...
});

那么,这是怎么回事?

第一次绘制图表时,drawCallback 会通过 is_initial = true 触发。在您的原始代码中,这发生在数据的 XMLHttpRequest 返回之后。

操作顺序为:

  1. 构造函数
  2. 更新选项
  3. drawCallback(is_initial=true)

当您内联数据时,dygraphs 不需要等待 XHR 返回。现在,操作顺序是:

  1. 构造函数
  2. drawCallback(is_initial=true)
  3. 更新选项
  4. drawCallback(is_initial=false)

第二个drawCallback发生是因为您调用了updateOptions()。因此,drawCallback 会因 is_initial = true 被触发,只是您没有尽早监听它。

dygraphs 提供 .ready()方法让您避免所有这些复杂的事情。您可能会更高兴使用它:

var vGraph = new Dygraph( ... );
vGraph.ready(function() {
buildTagList(vGraph.getLabels());
mySeriesColors = vGraph.getColors();
buildStyleDefinitions();
});

关于javascript - Dygraph的drawCallback中 "is_initial"何时为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22076253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com