![](/img/trans.png)
[英]How to append a button with onclick event that fires a function to a table cell
[英]Onclick event fires, but append-code is not executed
在下面的代码中, onclick 事件触发,但圆圈没有附加。 我不知道为什么。
也许是因为以下可变?
代码片段:
.on("click", function (event, d) {
let center = pathMap.centroid(d.geometry);
console.log(center);
mouse
.append("circle")
.attr("cx", center[0])
.attr("cy", center[1])
.attr("r", 20)
.attr("fill", "red");
mutable selected = d.properties;
来源: https : //observablehq.com/@statistikzh/leerwohnungszahlung
在您的笔记本中,每次单击地图中的一个区域时,都会重新评估地图单元格并重新绘制整个地图。 正在添加圆圈,但随后地图会立即从头开始重新绘制。
如果你注释掉这些行
console.log(colorScaleOrd(d.properties.GDE_ID));
d3.select(this).style("stroke", colorScaleOrd(d.properties.GDE_ID));
然后你会看到圆圈被添加了。
单击处理程序更改gem_sel
。 colorScaleOrd
取决于gem_sel
并且地图取决于colorScaleOrd
。 单击处理程序更新gem_sel
,这会导致重新评估colorScaleOrd
的单元格,从而导致重新评估绘制地图的单元格。 有一种循环依赖。
要参考可变状态简介笔记本,您应该尽量避免在 Observable 上使用可变状态以防止此类问题。
注意:
mutable
关键字很容易被误用,这使得成功编写 Observable notebook 变得更加困难! 将其视为需要绕过 Observable 的反应式数据流模型的极少数情况的逃生舱口。
编辑:我创建了一个你的 notebook的分支来演示一种在不使用mutable
情况下构建这个可视化的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.