gpt4 book ai didi

javascript - CanvasJS 无法正确渲染图表

转载 作者:行者123 更新时间:2023-12-01 02:36:09 24 4
gpt4 key购买 nike

我使用以下代码在 CanvasJS 中渲染 OHLC 图表:

<script>

var candleData = [];
var chart = new CanvasJS.Chart("chartContainer", {
title: {
text: 'Demo Stacker Candlestick Chart (Realtime)'
},
zoomEnabled: true,
axisY: {
includeZero: false,
title: 'Price',
prefix: '$'
},
axisX: {
interval: 1,
},
data: [{
type: 'ohlc',
dataPoints: candleData
}
]
});

function mapDataToPointObject(data) {
var dataPoints = [];
for(var i = 0; i < data.length; i++) {
var obj = data[i];
var newObj = {
x: new Date(obj.time),
y: [
obj.open,
obj.high,
obj.low,
obj.close
]
}
dataPoints.push(newObj);
}
return dataPoints;
}

function updateChart() {
$.ajax({
url: 'http://localhost:8080',
success: function(data) {
candleData = JSON.parse(data);
candleData = mapDataToPointObject(candleData);
chart.render();
}
});
}

$(function(){
setInterval(() => {
updateChart();
}, 500);
});

数据正确加载,解析为正确的格式,并且按照应有的间隔调用 render() 。问题是,虽然图表轴和标题都正确呈现,但没有显示任何数据。图表是空的。

有效的方法是将数据直接设置到图表中

chart.options.data[0].dataPoints = candleData;

为什么我的上述解决方案不起作用?有没有办法可以更新图表的 dataPoints 而无需对图表的 dataPoints 的直接访问器进行硬编码?

最佳答案

它与 JavaScript 的按值传递和按引用传递有关。

执行以下行后。

dataPoints: candleData

dataPoints 将引用 CandleData 的当前值。 IE。数据点 = [];

现在,如果您将 CandleData 重新定义为任何其他值。

        candleData = JSON.parse(data);
candleData = mapDataToPointObject(candleData);

然后 dataPoints 将不会意识到此更新,并且仍会引用空数组(您之前指出的)。

下面的代码片段将使您更容易理解

//pass by value
var a = "string1";
var b = a;
a = "string2";

alert("b is: " + b); //this will alert "string1"


//pass by reference
var c = { s: "string1" };
var d = c;
c.s = "string2";

alert("d.s is: " + d.s); //this will alert "string2"

有关更多信息,您可以阅读有关按值传递和按引用传递的内容。

Javascript by reference vs. by value

Explaining Value vs. Reference in Javascript

关于javascript - CanvasJS 无法正确渲染图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47898594/

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