我看过一些D3代码,它们带有类似这样的模式,用于附加元素:
var circles = svg.selectAll(null)
.data(data)
.enter()
.append("circle");
我真的不明白这个片段。为什么选择null?我对D3的理解方式是,如果要添加圆,则应为:
var circles = svg.selectAll("circle")
.data(data)
.enter()
.append("circle");
同样,如果要追加HTML段落,则应该为:
var circles = svg.selectAll("p")
.data(data)
.enter()
.append("p");
类也是如此:如果将元素添加到类中foo,则应该为selectAll(".foo")
。
但是,selectAll(null)
确实有效!元素被追加。那么,这是什么意思null呢?我在这里想念什么?
注意:这是一个自我回答的问题,试图提供一个针对该主题的“规范”问答,该主题以前已被许多先前的问题所涉及而API 并未对此进行解释。下面的大多数答案来自我在绝种的StackOverflow文档中编写的示例。
tl; dr
使用的目的selectAll(null)是确保“输入”选择始终对应于数据数组中的元素,对于数据中的每个元素都包含一个元素。
“输入”选择
要回答你的问题,我们必须简要解释一下D3.js中的“输入” 选择。你可能知道,D3的主要功能之一是将数据绑定到DOM元素的能力。
在D3.js中,当一种将数据绑定到DOM元素时,可能出现三种情况:
在情况#3中,所有没有相应DOM元素的数据点都属于“输入”选择。
因此,在D3.js中,“输入”选择是在将元素连接到数据之后包含与任何DOM元素都不匹配的所有数据的选择。如果在“输入”选项中使用附加函数,则D3将创建新元素,并为我们绑定该数据。
问题内容: 接口隔离原理(ISP)说,许多客户端特定的接口比一个通用接口好。为什么这很重要? 问题答案: ISP指出: 不应强迫客户依赖他们不使用的方法。 ISP与重要特性- 内聚和耦合有关。 理想情况下,您的组件必须高度定制。它提高了代码的健壮性和可维护性。 实施ISP可为您带来以下好处: 高内聚性 -更好的易懂性,鲁棒性 低耦合 -更好的可维护性,高抗变化性 如果您想了解有关软件设计原理的更多
我对编程很陌生,我已经自学了将近一个月了,有谁能给我解释一下我代码中错误的原因吗?在“Total(moneyConv(moneySum*moneyRate))”中出错。行,表示实际和形式的论点在长度上是不同的。我检查了我所有的参数,我觉得很好。多谢!
问题内容: C#和Java都定义 易失性读取具有获取语义 易失性写入具有释放语义 我的问题是: 这是定义volatile的唯一正确方法。 如果没有,如果语义相反,情况会完全不同,即 易失性读取具有释放语义 易失性写入具有语义 问题答案: 获取/释放语义的作用并不在于其他线程多久才能看到volatile字段本身的新写入的值,而在于易失性操作在不同线程之间建立事前联系的方式。如果线程A读取了一个vol
问题内容: 在Java中,可以使用 AtomicMarkableReference 原子地更新对象引用以及标记位。 该javadoc的状态: 实施注意事项:此实现通过创建表示“装箱的” [reference,boolean]对的内部对象来维护可标记的引用。 根据在该类的Java 8源代码中可以看到的情况,这是正确的: 该类的get方法的设计背后是否有原因? 使用这种布尔数组(而不是返回值对)有什么
问题内容: 在回答这个问题时,我和其他一些人实际上认为是错误的,因为认为以下方法可行: 说一个有 背后的原因是什么 而有一个 要么 要么 是造成尺寸 退化的 原因吗? 问题答案: 是对象dtype的2D数组,每行的第一个元素是一个列表。 是对象dtype的一维数组,其每个元素都是列表。 当您这样做时,NumPy不会对list的每个元素进行元素比较。它从中创建尽可能高维的数组,生成1D数组,然后广播
这里已经阐明了和之间的区别。 但我的问题是,为什么我们要使用关键字?从生成的Java代码角度来看没有区别。 静态编程语言代码: 生成: