2013-03-04 61 views
2

我想從這個代碼片斷檢查功能的「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(); 

我用的螢火,但我不能,進入該功能。我試圖在函數內部發出警告,但它沒有奏效。

+0

*「我正在使用螢火蟲,但我無法進入該功能。」*您應該可以。 *「我試圖在函數中加入一個警告,但它不起作用。」*這表明你引用的代碼之外存在問題,或者'linkDistance'不支持回調(所以從不調用函數你通過它)。 – 2013-03-04 10:24:16

+0

只需要清楚:'.linkDistance(function(3){return d;})'將一個函數傳遞給'linkDistance'。除非'linkDistance'通過它所接收的參數調用它,否則該函數不是**。那真的是你的意思嗎? – 2013-03-04 10:25:25

+0

您可以在'linkDistance'函數中使用['debugger'語句](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/debugger)來暫停執行,如果它是執行完畢。這可能比「警報」更有幫助。 – 2013-03-05 10:11:12

回答

1

D3的文檔提供你什麼是參數:

force.linkDistance([距離])

如果指定距離,設定鏈接的節點之間的目標距離到指定的值。如果未指定距離,則返回佈局的當前鏈接距離,默認爲20.如果距離是常數,則所有鏈接的距離相同。否則,如果距離是一個函數,那麼函數會針對每個鏈接(按順序)進行評估,通過鏈接及其索引,將此上下文作爲強制佈局;然後函數的返回值用於設置每個鏈接的距離。只要佈局開始,該功能就會被評估。通常,距離以像素指定;然而,這些單位相對於佈局的大小是任意的。

>

所以,如果該參數是一個函數,第一個參數是鏈路,第二個參數是鏈路的索引。在應用函數之前,您不應該忘記將數據關聯到強制佈局。

我有一個例子在這裏:

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

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

在我的JSON文件我定義isMyLeaf的每一個環節。