在d3.js v4中重新绑定导出

时间:2016-07-12 15:48:07

标签: javascript d3.js

我正在使用模块系统创建地图。我或多或少习惯了D3.js v3,但我还是习惯了v4。

我正在尝试添加一个调度,但我不知道如何在V4中重新绑定导出,因为此功能现在不可用。

因此,对于我的调度(_dis)和我的特定事件(" changetype"),d3 v3中的重新绑定在返回导出之前是正确的,例如:

d3.mapDots = function (districts){

   var _dis = d3.dispatch('changetype');

   (...)

   exports.color = function(_c){
       if(!arguments.length) return color;
       color = _c;
       return this;
   };    

   d3.rebind(exports,_dis,"on");
   return exports
   };

有人知道如何在v4中执行此操作吗?我一直在尝试dispatch.apply,但它没有用。

谢谢!

1 个答案:

答案 0 :(得分:10)

好问题。看起来调度对象有点changedd3.rebind不再存在。因为后者消失了,似乎没有办法“复制”(通过d3.rebind.on()方法。相反,你必须实现自己的。 See here bostock如何实施d3-brush

我把this jsFiddle放在一起演示了如何用D3 v4实现你所要求的。

重要的是实施.on方法:

instance.on = function() {
  var value = dispatcher.on.apply(dispatcher, arguments);
  return value === dispatcher ? instance : value;
}

并且,调度就像这样

dispatcher.call("was_clicked", this, "Hello, Foo!");