Tôi đang sử dụng một trong các ví dụ bố cục lực (http://bl.ocks.org/1153292) để hiển thị một mạng trên trang web của tôi.Cách cập nhật các phần tử bố trí lực D3 khi dữ liệu cơ bản thay đổi
Tôi cho phép người dùng chọn loại liên kết để xem tại bất kỳ thời điểm cụ thể nào. Tôi nhận thấy rằng khi tôi chọn xem liên kết loại A, sau đó thêm liên kết loại B và sau đó loại bỏ liên kết loại A vẫn còn liên kết của loại B được trình bày với A màu sắc.
Đây là mã chạy để thêm liên kết vào biểu đồ svg. Tôi đang thay đổi mảng this.links
bằng cách thêm và xóa liên kết khỏi mảng đó. Như bạn có thể thấy tôi thiết lập các thuộc tính lớp nhưng nó không được cập nhật - nó còn lại của loại liên kết A.
var path = svg.append("svg:g")
.selectAll("path")
.data(this.links)
.enter()
.append("svg:path")
.attr("class", function(d) { return "link " + d.type; })
.attr("marker-end", function(d) { return "url(#" + d.type + ")"; });
Tôi hiện làm việc xung quanh vấn đề này bằng cách cập nhật các thuộc tính lớp bên trong hàm đánh dấu nhưng điều này tắt khóa học nguyên nhân nhiều công việc không cần thiết.
Tôi đọc rằng thao tác nhập trả lại lựa chọn đã hợp nhất của các phần tử tồn tại và cả các thành phần mới để hoạt động của trình điều khiển nên cập nhật thành phần hiện tại và đặt giá trị mới.
Tôi đang thiếu gì?
Ido, tôi biết rằng đây là một bài đăng cũ, nhưng tôi tin rằng tôi đang gặp cùng một vấn đề mà bạn đang có, và tôi vẫn không hiểu giải pháp này. Bạn có thể giải thích cách nó hoạt động - cách nó giải quyết vấn đề ban đầu của bạn? Cảm ơn bạn. – Mars
Giải pháp hoạt động vì các cập nhật attr của cx và cy nằm ngoài ngữ cảnh enter(), vì vậy chúng xảy ra mọi lúc. Trong mã ban đầu, các hàm attr được gọi trong ngữ cảnh enter(), vì vậy chúng chỉ được tạo một lần theo nhận dạng đối tượng. Tôi đã học được gì về các chức năng chính làm đối số thứ hai cho dữ liệu(): http://bost.ocks.org/mike/constancy/ – velotron