2015-02-09 71 views
2

我已將d3.js從3.5.3更新到3.5.4。 自上次更新以來,我收到了以下錯誤。儘管如此,代碼仍然可以在3.5.3版本上運行。選擇功能不工作在3.5.4版d3.js

D:\softwares\nodejs\node_modules\d3\d3.js:562 
    return n.querySelector(s); 
     ^
TypeError: Cannot call method 'querySelector' of undefined 
    at d3_select (D:\softwares\nodejs\node_modules\d3\d3.js:562:14) 
    at Object.d3.select (D:\softwares\nodejs\node_modules\d3\d3.js:1043:17) 
    at IncomingMessage.<anonymous 
(D:\softwares\nodejs\node_modules\chart.js:63:14) 
    at IncomingMessage.emit (events.js:92:17) 
    at _stream_readable.js:943:16 
    at process._tickCallback (node.js:419:13) 

這是我的代碼行我得到錯誤? 我需要爲使用3.5.4版本添加更多內容嗎?

var svg = d3.select('body').html('').append('svg') 
    .attr('xmlns', 'http://www.w3.org/2000/svg') 
    .attr('xmlns:xlink', 'http://www.w3.org/1999/xlink') 
    .attr("width", width + margin.left + margin.right) 
    .attr('height', height + margin.top + margin.bottom) 
    .attr('id', 'app-d3-bar-chart') 
    .append("g") 
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")") 
+0

考慮到你似乎在節點上運行這個,從[release notes](https://github.com/mbostock/d3/releases)中可以看到以下內容:「零依賴!JSDOM現在僅限於測試的開發依賴性「。 – 2015-02-09 14:23:51

+0

這是否意味着如果您在節點上使用d3js,則需要添加JSDOM所需的依賴項? – 2015-02-09 16:48:46

+0

@LarsKotthoff我不清楚它到底意味着什麼。你能解釋一下嗎?我在節點服務器上使用d3。 – 2015-02-10 06:00:25

回答

3

d3#3.5.4開始,JSDOM是一個開發依賴項。您將需要將其作爲依賴項包含在內。注意JSDOM 4.0.0需要io.js,對Node.js使用3.x。對我的依賴項工作是:

"dependencies": { 
    "d3": "~3.5.5", 
    "jsdom": "~3.1.2" 
} 

然後在你的代碼替換行:

var svg = d3.select('body').html('').append('svg') 

var document = require('jsdom').jsdom(); 
var svg = d3.select(document.body).html('').append('svg') 

參考this gist的工作示例。