javascript - D3.js:访问函数的输出

标签 javascript d3.js callback

作为 Javascript 新手,我无法理解如何访问以下函数的输出:

function dimensionLabels(d) {
  return __.dimensions[d].title ? __.dimensions[d].title : d;  // dimension display names
}

我所理解的是,当它作为 .text 中的回调函数传递时,它成功返回一些显示在浏览器中的文本(例如“标题 [n°1]”):

    .append("svg:text")
      .attr("text-anchor", "middle")
      .attr('x', 0)
      .attr('y', -10)
      .attr('class', "label")

      .append('svg:tspan')
      .attr('x', 0)
      .attr('dy', 0)
      .text(dimensionLabels)

所以我假设DimensionLabels返回一些字符串,就好像我用.text(“myString”)替换.text(dimensionLabels)一样,原始文本(“Header [n°1]”)被成功替换为“myString” ”。

但是,我需要做的是从维度标签访问文本并处理它,例如使用:

.text(dimensionLabels.split('[', 2)) 

但这会产生以下错误:

TypeError: dimensionLabels.split is not a function

有人可以描述一下上面的函数是如何工作的,以及我应该做什么来访问它的输出吗?

最佳答案

.text 将函数作为参数,然后在内部调用它,并向其传递 d(数据)参数。因此,由于 .text 想要一个函数,只需创建您自己的匿名函数并包装对 dimensionLabels 的调用:

.text(function(d){
  var string = dimensionLabels(d);
  return string.split('[', 2);
})

回复评论

d3 .text 方法可以采用字符串返回字符串的函数。如果给它一个字符串,它会将文本设置为该字符串。如果您给它一个函数,该函数不会立即调用。相反,在后台,d3 稍后会调用它。当它这样做时,它会传入 d 参数,这个 d 参数是绑定(bind)到该 DOM 片段的数据。 (在某些时候,您的代码通过 .data 调用进行数据绑定(bind))。

由于以下行,您在调用 dimensionLabels("myString") 时收到错误:

__.dimensions[d].title

您有一些名为 __ 的对象,它具有 dimensions 属性。该属性是一个可以索引的数组或对象(我不知道,因为你已经为我提供了足够的代码来确定):

__.dimensions["myString"]

返回未定义。并且未定义永远不会有名为title的属性。然后BAM,你得到了你的错误。

关于javascript - D3.js:访问函数的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41912418/

相关文章:

javascript - 如何使用 d3.js 避免图形中的日志零

javascript - 调用函数以在 d3 中提供 .attr()

javascript - Gulp 任务中 `return` 语句和 `callback` 引用的用途

javascript - NodeJS Async - 将参数传递给回调

javascript - 响应式文件管理器回调函数

php - 将验证从 Controller 传递回 ajax 函数

javascript - 如何执行从ajax响应返回的javascript函数

javascript - 有没有工具可以删除 javascript 中未使用的方法?

javascript - 如何设置00 :00:00 using moment. js

javascript - 需要将方形图像附加到圆形 Node d3.js