1

我正在尝试创建一个 d3 插件,这个 stackoverflow 问题:

如何制作一个d3插件?

但在他展示的例子中

(function() {
    d3.selection.prototype.editable = d3.selection.enter.prototype.editable = function() {
        return this.attr('data-editable', true);
      };
})();

我看不出他如何实际检索与选择相关的数据。这是否甚至可以通过 d3.selection 的扩展来检索?我对 d3 源代码进行了一点处理,但发现自己比以前更加困惑。

写过 d3 扩展/插件的人可以指导我正确的方向吗?

4

1 回答 1

1

在 javascript 中,this引用的对象(通常在上面的示例代码中)由调用this出现的函数的对象确定。

因此,该行将return this.attr('data-editable', true);返回与调用完全相同的 d3 选择对象editable

因此,您将获得正常的旧 d3 选择对象,就像在普通的 d3 方法链接模式中一样。一旦你有了它,获取数据只是查找 d3 选择对象的 API 的问题。

如果您对如何取回数据特别感兴趣,请查看 data 方法。从上面的链接中,当没有参数调用该方法时:

如果未指定值,则此方法返回选择中第一组的数据数组。返回数组的长度将匹配第一组的长度,并且返回数组中每个数据的索引将匹配选择中的相应索引。如果选择中的某些元素为空,或者它们没有关联数据,则数组中的相应元素将是未定义的。

于 2013-01-03T10:15:16.263 回答