d3:为什么d3.json中的变量集不能在外面访问?

时间:2013-11-16 15:00:35

标签: svg d3.js tree

考虑以下代码

var height = 500, width = 700;
var root;
var tree = d3.layout.tree()
    .size([height, width]);

d3.json("abc.json", function(error, flare) {
  root = flare;
  alert(root); // This prints object object
});

alert(root); // This prints undefined

d3.json中的警报正确显示它是一个对象,但d3.json外的警报打印未定义。如何在d3.json外部访问root?我需要它,因为根据页面中的一些用户输入,我可能需要在d3树中进行一些操作,例如,删除一些节点。这些用户输入位于与d3树分开的某些控件上。

谢谢。

1 个答案:

答案 0 :(得分:1)

这是因为d3.json异步运行。

这个例子让我们更清楚:

root = 'initial value';

d3.json("abc.json", function(error, flare) {
  // This runs after `abc.json` has been fetched
  root = flare;
  alert(root); // This prints object object
});

// This runs before `abc.json` has been fetched
alert(root); // This will show 'initial value'

在当前执行上下文终止并且已获取abc.json文件之后,将调用回调函数,即使它是从浏览器的缓存中获取的。

因此,您会注意到initial value的提醒发布在[Object object]的提醒之前。