2012-04-12 34 views
8

Câu hỏi nhanh về tham gia dữ liệu. Giả sử tôi có một số yếu tố mà mỗi phần tử chứa a. Khi tôi tham gia dữ liệu ban đầu, nó sẽ tự động được thừa kế bởi các phần tử mà tôi thêm vào lựa chọn nhập.Thừa kế trong kết nối dữ liệu

Khi dữ liệu được thay đổi và tôi rebind nó để tôi đã mong đợi rằng các yếu tố sẽ nhận dữ liệu mới nhưng điều này đã không xảy ra.

Để xử lý điều này tôi cần phải rebind một cách rõ ràng các dữ liệu ở cấp thấp hơn như thế này:

gElements.selectAll("circle") 
    .data(function(d) { return [d]; } 
    .enter().append("circle"); 

này xử lý cả hai trường hợp sáng tạo và rebind tiếp theo. Nhưng có vẻ như dư thừa khi trở về [d] về bản chất là điều xảy ra tự động với việc thừa kế dữ liệu ban đầu từ phần tử cha.

Cách tiếp cận này có đúng cách để xử lý việc này hay không, tôi có bị nhầm lẫn ở đâu đó ở đây không?

Trả lời

17

Khi bạn liên kết dữ liệu với các phần tử qua selection.data, nó sẽ cập nhật dữ liệu được liên kết với các yếu tố đó. Tuy nhiên, nó không không tự động truyền dữ liệu mới cho các phần tử con cháu; bạn phải tự mình làm điều này.

Khi bạn gọi selection.select, là đối tác của selection.append, dữ liệu từ cha mẹ sẽ được liên kết với con đã chọn cho từng phần tử đã chọn. Khi bạn gọi selection.selectAll, dữ liệu không bị ràng buộc, do đó bạn phải gọi selection.data để liên kết dữ liệu mới với trẻ em.

Rất khó để trả lời câu hỏi của bạn mà không thấy nhiều ngữ cảnh hơn. Nếu bạn đã cập nhật dữ liệu trên gElements, và mỗi phần tử G chứa một vòng tròn, bạn có thể truyền dữ liệu từ công ty mẹ G để tròn con sử dụng selection.select:

gElements.select("circle"); 

Các đoạn mã bạn viết sẽ chỉ được sử dụng nếu bạn muốn tạo một vòng kết nối mới, nếu vòng kết nối bị thiếu. Điều này được mô tả trong Thinking with Joins. Mã chính xác mà bạn sẽ viết có thể phụ thuộc vào việc nó sẽ được thực hiện trên cả hai lần nhập và cập nhật hay chỉ là khi cập nhật.

+0

Có, bạn nói đúng, tôi chỉ có 1 vòng tròn cho mỗi . Tôi đã không nhận ra rằng chọn gây ra thừa kế dữ liệu nhưng tôi thấy trong tài liệu nó thực sự nói rằng. Tôi thấy điều này một chút phản trực giác vì tôi luôn nghĩ về hành động chọn làm hoạt động chỉ đọc, nhưng trường hợp này thực sự khiến nút bị sửa đổi. –

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