首页 > 解决方案 > 在使用 scala-js-d3 应用更新之前过滤数据

问题描述

我正在使用scala-js-d3来绘制一些相当复杂的图形。出于性能原因,我想在应用转换之前过滤更新集。

到目前为止,我的代码如下所示:


def showData(a: Drawable): Boolean = // [...] determines if the data point should be visible

val selection: Update[Drawable] =
      d3.select(s"#$parentElement")
        .selectAll(s".$className")
        .data(drawables.toJSArray, (a: Drawable) => a.id.toString)

selection.enter
  .append("g")
   // [...] drawing of the data point

selection
  .attr("display", (a: Drawable)  => if(showData(a)) "block" else "hidden") // (*2)

selection
  .filter((a: Drawable)  => showData(a)) // This is not possible? (*1)
  .transition()
  .duration(600)
  .ease("linear")
  .attr("transform", (a: Drawable) => /* [...] */)

在应用如图所示的转换之前,有什么方法可以过滤要更新的数据(*1)?无论如何,这些数据点中的大多数都是不可见的,因此应用这些转换没有意义。

非常感谢任何帮助或提示!

编辑:在零件期间不能进行过滤,select因为从可见到不可见的变化(见(*2))永远不会发生。

标签: scalad3.jsscala.js

解决方案


推荐阅读