d3.dispatch() 未按预期工作

d3.dispatch() not working as expected

我一周前开始使用 D3.js,目前正在尝试弄清楚 d3.dispatch() 的工作原理。我有一个超级简单的例子

<script src="d3.min.js"></script>
<script>

var dispatch = d3.dispatch("load","click");

dispatch.load("Initial Value");

dispatch.on("load", function(textvalue) {
  alert(textvalue);


  dispatch.on("click", function(newvalue) {
    alert(newvalue);
  });
});

</script>

我本以为听众 dispatch.on("load",function(textvalue){} 会通过显示 JavaScript 警报对前一行 dispatch.load("Initial Value"); 做出反应,但事实并非如此。在 Lars 的回应之后(感谢 Lars,它是有道理的......只是一个问题......)我编辑了代码如下:

 d3.csv("data.csv", function(error, states) {  
  dispatch.load("Initial Value");  
});

dispatch.on("load", function(textvalue) {
  alert(textvalue);         

  dispatch.on("click", function(state) {
    select.text(state);
  });
});
</script>

我刚刚将调用 dispatch.load 更改为在 d3.csv() 调用中,在我看来这仍然是在定义处理程序之前调用 load(),但在这种情况下它确实有效。是什么赋予了? P.S 也是 JavaScript 的新手所以请原谅我的天真。

如有任何帮助,我们将不胜感激

您的代码只是顺序错误 -- 在您调用 .load() 时,此事件的处理程序尚未定义。当您重新排列代码以便在调用它之前定义处理程序时它会起作用。

完成演示 here