Tôi đang sử dụng hàm D3 each
, chấp nhận chức năng gọi lại và gọi hàm này qua số this
làm đối số, nhưng tôi cần truy cập cả this
và _this
. Đây là mã coffeescript:Làm thế nào để sử dụng `this` và` _this` (mũi tên chất béo) bằng cách sử dụng coffeescript?
@x = d3.scale.ordinal().domain(d3.range(@model.geneExpressions[0].length)).rangeBands([0, width])
getRow = (row) =>
cell = d3.select(this).selectAll(".cell")
.data(row)
.enter().append("rect")
.attr("x", (d,i) => @x(i))
rows = @heatmap.selectAll(".row")
.data(@model.geneExpressions)
.enter().append("g")
.each(getRow)
và javascript mà nó tạo ra:
var _this = this;
this.x = d3.scale.ordinal().domain(d3.range(this.model.geneExpressions[0].length)).rangeBands([0, width]);
getRow = function(row) {
var cell;
return cell = d3.select(_this).selectAll(".cell").data(row).enter().append("rect").attr("x", function(d, i) {
return _this.x(i);
})
};
rows = this.heatmap.selectAll(".row").data(this.model.geneExpressions).enter().append("g").attr("class", "row").each(getRow);
Làm thế nào tôi có thể nhận được coffeescript sử dụng this
thay vì trong dòng này và để lại tất cả mọi thứ cùng ?:
return cell = d3.select(this) ...
Vấn đề là tôi không thể chuyển @x làm đối số cho each
và sử dụng mũi tên mỏng thay vì mũi tên chất béo (vì sau đó tôi không thể truy cập s @x), trừ khi tôi viết lại hàm D3, có vẻ quá mức cần thiết.
Bạn đã cứu tôi. Cảm ơn! – nachocab
Câu trả lời tuyệt vời mu. –