我正在使用模块系统创建地图。我或多或少习惯了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,但它没有用。
谢谢!
答案 0 :(得分:10)
好问题。看起来调度对象有点changed,d3.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!");