d3.dispatch()无法正常工作

时间:2015-03-04 11:00:31

标签: javascript d3.js

我在一周前开始使用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的新手,请原谅天真。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:2)

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

完整演示here