d3.js on event + jshint 可能严格违反

Posted

技术标签:

【中文标题】d3.js on event + jshint 可能严格违反【英文标题】:d3.js on event + jshint possible strict violation 【发布时间】:2015-12-05 22:10:22 【问题描述】:

我有一个 on mouseover 事件处理程序绑定到条形图 rect svg 对象。

 svg.selectAll('.bar')
    .data(data)
    .enter()
    .append('rect')
    .on('mouseover', mouseover)
    .on('mouseout', mouseout)
    .attr('class', 'bar')
    .attr('x', 0)
    .attr('y', function(d)  return y(d[keyName]); )
    .attr('height', y.rangeBand())
    .attr('width', function(d)  return x(d[valueName]); )
    .attr('val', function(d)  return d[valueName]; );

我调用mouseover 函数获取用户悬停的矩形对象,并在设置填充样式的同时提取一些值。一切都按方面工作,但是当我运行 jshint 时,它会警告我在使用 this 时“可能严格违反”。关于如何让这个 lint 案例通过 D3 的任何想法?

function mouseover() 
var val = d3.select(this).attr('val');

div.transition()
    .duration(200)
    .style('opacity', 0.9);

div.html(val + ' Servers')
    .style('left', (d3.event.pageX + 20) + 'px')
    .style('top', (d3.event.pageY - 20) + 'px');

d3.select(this).style('fill', 'brown');

【问题讨论】:

可能是因为 JSHint 认为它是暴力的,因为 this 没有在方法中使用。请记住:JShint 是,hinting,它并不总是 100% 正确。 Why is JSHINT complaining that this is a strict violation?的可能重复 【参考方案1】:

使用函数表达式代替声明

var mouseover = function () 
var val = d3.select(this).attr('val');

div.transition()
    .duration(200)
    .style('opacity', 0.9);

div.html(val + ' Servers')
    .style('left', (d3.event.pageX + 20) + 'px')
    .style('top', (d3.event.pageY - 20) + 'px');

d3.select(this).style('fill', 'brown');
;

【讨论】:

以上是关于d3.js on event + jshint 可能严格违反的主要内容,如果未能解决你的问题,请参考以下文章

将 d3 js 代码从 v5.16 重构到 v6.6.2,d3.event 重大更改

D3.js:使用元素位置而不是鼠标位置定位工具提示?

JSHint - ^ '简洁方法' 在 ES6 中可用

如何在VizFrame中订阅滚动事件和其他D3.js事件?

D3.JS“缩放”未定义

d3.js 带有可切换系列的堆叠条