无法从具有树布局的强制图调用force.tick()

时间:2014-07-21 08:55:19

标签: javascript svg d3.js force-layout

我有一个基于force-collapsable example的可视化,我想加快或跳过初始节点运动,以尽快使图形达到平衡。

我已遵循此answer中的建议并从我的代码中调用了tick(),但它在force-collabsable示例中不起作用,因为强制对象上没有tick或alpha方法。 / p>

继修改之后我的代码看起来是什么样的,我已经删除了on tick调用并在最后添加了force.tick()调用:

var force = d3.layout.force()  // line 38 in the example
    //.on("tick", tick)        // commented out as I call tick instead
    .charge(function(d) { return d._children ? -d.size / 100 : -30; })
    .linkDistance(function(d) { return d.target._children ? 80 : 30; })
    .size([w, h - 160]);

function update() {            // line 56 in the example
  var nodes = flatten(root),
      links = d3.layout.tree().links(nodes);

  force                        // line 60 in the example
    .nodes(nodes)
    .links(links)
    .start();

  force.tick()                 // added by me to cause a tick and the point of error

但是调用因'未捕获的TypeError:undefined不是函数'而失败,因为该方法不存在。

当我调用它时,强制对象具有以下值(从Chrome调试器中获取):

charge: function (x) { distance: function (x) { drag: function () { friction: function (x) { gravity: function (x) { linkDistance: function (x) { linkStrength: function (x) { links: function (x) { nodes: function (x) { on: function (type, listener) { resume: function () { size: function (x) { start: function () { stop: function () { theta: function (x) { proto: Object

为什么此示例中的force对象与不使用树布局的其他force布局示例不同?我怎么能直接打电话给tick()?

1 个答案:

答案 0 :(得分:0)

我发现如果我删除了对d3.geom.js和d3.layout.js的引用,我可以调用tick()并且在没有这些文件的情况下对我的布局没有负面影响。