【问题标题】:check argument value of d3 function检查 d3 函数的参数值
【发布时间】:2013-02-18 09:44:24
【问题描述】:

我想通过这段代码 sn-p 检查函数中“d”参数的值:

var force = force = d3.layout.force()
    .nodes(json.nodes)
    .links(json.links)
    .linkDistance(function (d){return d;}) //I need to know the "d" value to decide what return
    .size([width, height])
    .start();

我正在使用萤火虫,但我无法进入该功能。我试图在函数中添加一个警报,但它不起作用。

【问题讨论】:

  • “我正在使用firebug,但我无法进入该功能。” 你应该可以。 “我试图在函数中添加警报,但它不起作用。” 这表明您引用的代码之外存在问题,或者 linkDistance 不支持回调(并且所以永远不要调用你传递的函数)。
  • 明确一点:.linkDistance(function(3) { return d;}) 将函数传递给linkDistance。该函数不会被调用,除非linkDistance 通过它接收的参数调用它。这真的是你的意思吗?
  • 您可以在linkDistance 函数中使用debugger statement 来暂停执行,如果它被执行的话。这可能比alert 更能帮助您。

标签: javascript json d3.js firebug force-layout


【解决方案1】:

d3 文档为您提供了参数:

force.linkDistance([距离])

如果指定了距离,则将链接节点之间的目标距离设置为指定值。如果未指定距离,则返回布局的当前链接距离,默认为 20。如果距离为常数,则所有链接的距离相同。否则,如果距离是一个函数,则对每个链接(按顺序)评估该函数,传递链接及其索引,并将 this 上下文作为强制布局;然后使用该函数的返回值来设置每个链接的距离。每当布局开始时,都会评估该函数。通常,距离以像素为单位;但是,单位相对于布局的大小是任意的。

>

所以,如果参数是一个函数,第一个参数是链接,第二个参数是链接的索引。在应用函数之前,您不应忘记将数据与强制布局相关联。

我这里有一个例子:

force
    .nodes(json.nodes)
    .links(json.links);

    force.linkStrength(function(d,i) {return (json.links[i].isMyLeaf ? .01: 1);});

在我的 json 文件中,我为每个链接定义了 isMyLeaf。

【讨论】:

    猜你喜欢
    • 2011-01-20
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    相关资源
    最近更新 更多