2012-07-26 20 views
8

Vì vậy, tôi gặp sự cố khi làm theo hướng dẫn d3 rất đơn giản. Về cơ bản tôi đang cố gắng để thêm các yếu tố hình tròn SVG bằng cách liên kết dữ liệu đến các yếu tố hình tròn svg hiện sau đó gọi enter.append Như hình dưới đây:d3 nối thêm và nhập các vấn đề

var svg =d3.select("body").selectAll("svg"); 
var circle = svg.selectAll("circle"); 
var w=window.innerWidth; 
console.log(circle); 
circle.data([500,57,112,200,600,1000]); 


circle.enter().append("circle") 
    .attr("cy",function(d) { 
     return (d) 
     }) 
    .attr("cx", function(i){ 
     return (i*100) 
    }) 
    .attr("r", function(d) { 
     return Math.sqrt(d); 
     }) 

Mà có vẻ như nó sẽ thêm 3 yếu tố cộng đồng mới (vì tôi đã có 3 tạo). Tuy nhiên, thay vì nhận được những 3 yếu tố vòng tròn mới được thêm vào, tôi chạy vào lỗi này:

Uncaught TypeError: Object [object SVGCircleElement],[objectSVGCircleElement],[object SVGCircleElement] has no method 'enter'

Tôi đã làm về cơ bản điều tương tự với đoạn văn, và có vẻ như để làm việc tốt:

var p =d3.select("body").selectAll("p") 
.data([4, 8, 15, 16, 23, 42]) 
.text(function(d) { return "I'm number " + d + "!"; }); 

//Enter  
p.enter().append("p") 
.text(function(d) { return "I'm number " + d + "!"; }) 
.style("color", function(d, i) { 
return i % 2 ? "#000" : "#eee"; 
}); 

Tuy nhiên ngay sau khi tôi cố gắng thêm phần tử SVG vào nó, tôi tiếp tục nhận được lỗi tương tự.

Có vẻ như chỉ nên có lỗi cú pháp hoặc gì đó, nhưng tôi đã trải qua mã 5 nghìn tỷ lần và không thể tìm thấy bất kỳ thứ gì.

Bất kỳ trợ giúp nào được đánh giá cao và cảm ơn bạn trước khi trao tay cho thời gian của bạn.

Isaac

Trả lời

14

Bạn muốn gọi enter trên kết quả của circle.data thay vì circle riêng của mình.

var circle = svg.selectAll("circle"); 
circle.data([500,57,112,200,600,1000]).enter().append("circle"); 

Bạn đã làm điều này một cách chính xác trong p ví dụ của bạn bằng cách lưu trữ sự trở lại của data trong biến p. Trong khi đó, trong ví dụ circle, bạn đang lưu trữ khoản hoàn trả d3.select.selectAll trong biến số circle của mình.

+0

Cảm ơn bạn rất nhiều! để loại bỏ lỗi của tôi và có ý nghĩa hoàn hảo. Anh đã cứu tôi hai lần rồi đấy Olsen! – Cabbibo

+0

@IsaacCohen Không sao cả. Vui lòng chấp nhận câu trả lời nếu không có vấn đề nào khác với câu hỏi này. –

+0

xin lỗi đã mất nhiều thời gian, Cố gắng chấp nhận nó, nhưng nó sẽ không cho tôi một giờ sau đó bị phân tâm và quên nó đi. Lời xin lỗi của tôi! – Cabbibo

Các vấn đề liên quan