我正在尝试从 D3 中的 CSV 解析数据——解析一次并将数组存储到变量中以供多个函数访问。我正在一个 namespace 模块内工作,其中父变量应该使之成为可能,可惜,没有运气。这是一个简化的示例:
var namespace = namespace || {};
namespace.module = function() {
var dataItems; <== want to be accessible to all functions inside module
function getData() {
d3.csv('data.csv', function(d) {
dataItems = d;
});
}
function drawChartA() {
// want to have access to parsed CSV data here
console.log(dataItems); <== "error: undefined"
}
return {
getData: getData,
drawChartA: drawChartA
}
}();
// run code
$(document).ready(function() {
namespace.module.getData();
namespace.module.drawChartA();
});
我似乎访问已解析数组的唯一方法是在 getData() 函数的范围内,而不是在外部。我什至尝试从 drawChartA 方法内部调用 getData() ,第一件事是相同的结果。另一篇文章建议将变量存储在 Window 对象下,但不应该有一种方法可以在命名空间模块内处理所有这些吗?仍在学习所有这些......请指教! :)
最佳答案
一种方法是从 d3.csv 调用内部调用该函数,如下所示:
d3.csv('data.csv', function(error, data) {
drawChartA(data);
}
或者您可以将所有内容都包含在您的drawChartA函数中,例如:
function drawChartA() {
d3.csv('data.csv', function(error, data) {
//Do chart A stuff
}
}();
这是一个指向 post by Mike Bostock 的链接关于一个非常相似的主题。
关于javascript - 如何在函数之间共享解析的 D3.js CSV - 范围问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18822418/