Có thể không? Tôi không chắc chắn, kể từ d3 sử dụng nặng nề của this
rebindings và điều này dường như xung đột với ES6 spec.Sử dụng các chức năng mũi tên với d3
Ví dụ, sau đây hoạt động tốt:
// Working fine
var data = [1,2,3]
var svg = d3.select('body').append('svg').attr('height', 500).attr('width', 500).style('background-color', 'orange');
var gs = svg.selectAll('g').data(data).enter();
gs.append('circle')
.attr('cx', function() { return Math.random()*500; })
.attr('cy', function() { return Math.random()*500; })
.attr('r', function() { return Math.random()*100; })
.each(function() { console.log(this); }); // this is bound to the current element in the enter selection
Trong khi đây không làm việc như mong đợi (this
không gắn kết với các yếu tố hiện tại trong nhập lựa chọn nhưng để Window
đối tượng):
var data = [1,2,3]
var svg = d3.select('body').append('svg').attr('height', 500).attr('width', 500).style('background-color', 'blue');
var gs = svg.selectAll('g').data(data).enter();
gs.append('circle')
.attr('cx',() => Math.random()*500)
.attr('cy',() => Math.random()*500)
.attr('r',() => Math.random()*100)
.each(() => console.log(this)); // this is bound to Window object
Fiddle liên quan here.
@chriskelly ví dụ của bạn chỉ đơn giản là đặt giá trị tương tự cho tất cả các yếu tố trong việc lựa chọn, đó không phải là những gì tôi muốn đạt được (đó là lý do tại sao các hàm được sử dụng trong cơ sở mỗi phần tử) – jarandaf
Khi tôi chạy ví dụ của bạn, sự khác biệt duy nhất tôi thấy là nhật ký bảng điều khiển đầu ra. Nhưng tại sao bạn muốn truy cập '' 'this'''. Đây là một câu hỏi thú vị nhưng tôi muốn biết một trường hợp nó sẽ là một vấn đề. – chriskelly
@chriskelly đó là một trường hợp sử dụng khá cụ thể (có một số hàm mà tôi muốn sử dụng lại để tạo ra một cấu trúc phức tạp của các phần tử trong nhóm svg, tôi cần 'this' để biết nhóm nào tôi đang tham chiếu đến, nơi các phần tử mới sẽ được thêm vào). – jarandaf