Typescript/D3 v4 - d3.drag().on ("end"中的 this 上下文,this.dragended)

标签 typescript d3.js

我正在使用 D3 库在维恩图中移动项目。当我停止拖动时,我想确定项目在图表中的位置。

item.call(d3.drag()
    .on("start", this.dragstarted)
    .on("drag", this.dragged)
    .on("end", this.dragended)
);

这些是我在拖动开始、进行和结束时调用的函数。

dragended(d: TCMemberScenario, i: number) {
    d3.select(this).classed("active", false);
    d.calculateRoles();
    this.save();
}

这是拖动结束时调用的函数。我更新了图中的一些东西,然后我想调用保存方法。这是类中的另一个方法。但是,this 变量引用的是 D3 对象而不是类的实例。 所以我得到一个“Uncaught TypeError: Cannot read property 'save' of undefined”

如何从 dragended 方法中调用我类的另一个方法?

最佳答案

要保留对“this”的引用,请使用如下箭头函数:

item.call(d3.drag()
    .on("start", (d, i) => this.dragstarted(d,i))
    .on("drag", (d, i) => this.dragged(d, i))
    .on("end", (d, i) => this.dragended(d, i))
);

关于Typescript/D3 v4 - d3.drag().on ("end"中的 this 上下文,this.dragended),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38945311/

相关文章:

javascript - Typescript 数组推送仅显示最新项目

typescript - "-?"语法在 TypeScript 映射类型中意味着什么?

javascript - 向 d3.js 分层条形图添加工具提示

javascript - 更改图表 d3 的颜色

typescript - 元组泛型

javascript - 在提交表单上显示模态

javascript - 双线性缩放算法奇怪的效果

javascript - .attr 与 D3.js 中的 .classed

javascript - 无法按 javascript 对象中的列表项进行分组

javascript - 多个力布局导致滴答函数冲突