javascript - 如何在函数之间共享解析的 D3.js CSV - 范围问题?

标签 javascript d3.js scope

我正在尝试从 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/

相关文章:

javascript - 如何在 ASP.NET MVC 应用程序中组织 JavaScript 代码

javascript - Laravel 和 VueJS - 在哪里\如何放置实例和组件

javascript - 使用 d3.js 添加可扩展栏

c - 可靠的 C 上下文窗口

javascript - IIFE 中的函数引用不可用?

swift - 如何声明具有两种可能类型的变量

javascript - jQuery UI 自动完成 : Clear Previous Search Term

javascript - 如何在 JavaScript 中读取/写入文本文件?

javascript - 在 d3js 布局中使用 XML 作为数据源在 Firefox 中不起作用

d3.js - 无法获得 alchemy.js 图形可视化以显示面板、缩放或搜索