gpt4 book ai didi

Javascript硬编码对象作为参数,但不引用全局对象

转载 作者:行者123 更新时间:2023-12-03 11:37:51 28 4
gpt4 key购买 nike

我在使用 JQuery Flot 时遇到了一个奇怪的问题。

我一直在运行

var plot = null;

function initPlot () {
plot = $.plot("#graph", myData, { /* my options here */ });
}

一切正常。

我将选项数据移动到函数范围内的变量中

var plot = null;

function initPlot () {
var myOptions = { /* my options here */ };
plot = $.plot("#graph", myData, myOptions);
}

再说一遍,一切正常。

然后我将变量移动到更广泛的范围(这样我就可以在其他函数中引用它)。

var plot = null;
var myOptions = { /* my options here */ };

function initPlot () {
plot = $.plot("#graph", myData, myOptions);
}

突然间它就无法正确绘制了。更令我困惑的是,它获取了大多数选项的值——出现了图表,但没有出现数据。

使用 Chrome 的调试器,我可以看到在调用 $.plot()myOptions 具有正确的值。我还尝试设置局部变量 o = myOptions 并使用 o 而不是 myOptions 调用 $.plot() ,但这也无法绘制数据。

造成这种情况的原因是什么以及如何解决它?

我应该注意,我正在使用 Flot.Grow 和 Flot.Stack,但禁用它们不会改变结果。

编辑(再次)

根据评论,这实际上是我的代码的状态:

<body>
<div id="graph" style="width: 100%; height: 800px;"></div>
<script>
var idMap = {};
var yesData = [];
var noData = [];
var incData = [];
var voteData = [{ label: "Yes votes", data: yesData },
{ label: "No votes", data: noData },
{ label: "Not met quorum", data: incData }];
var ticks = [];
var plot = null;

var myOptions = {
series: {
//stack: true,
lines: {
show: false,
fill: true,
steps: false,
},
bars: {
show: true,
barWidth: .8,
horizontal: true,
},
//grow: {
// active: false,
// steps: 20,
// stepDirection: "up",
// stepMode: "linear",
// valueIndex: 0,
// growings: [{
// valueIndex: 0,
// }]
//},
},
yaxis: {
min: -.2,
max: 10, //dictLen(idMap),
//ticks: ,
//tickLength: 0,
},
xaxis: {
min: 0,
max: 200,
},
grid: {
hoverable: true,
},
};

function dictLen(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};

function setDataPoint(val) {
var total = val.r["yes"] + val.r["no"];
if (total < val.q) {
incData.push([total, idMap[val.id]]);
}
else {
yesData.push([val.r["yes"], idMap[val.id]]);
noData.push([val.r["no"], idMap[val.id]]);
}
}

function initData() {
$.getJSON('/Vote/results', function (data) {
$.each(data, function (key, val) {
idMap[val.id] = key;
ticks.push([key + .4, val.nm]);
setDataPoint(val);
});

initPlot();
});
}

function initPlot() {
plot = $.plot("#graph", voteData, myOptions);
}

$(document).ready(function () {
initData();
});
</script>
</body>

最佳答案

原来我是个白痴。

问题是我在填充 idMap 之前计算了 myOptions.yaxis.max。然后,当我在这里等待答案时,我在数据库端进行了一些重构,这导致了一个空数据集。

当我修复数据库并将 myOptions 设置为仅静态值时,它工作得很好。

关于Javascript硬编码对象作为参数,但不引用全局对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26409592/

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