处理NVD3图表的javascript事件
我正在将NVD3集成到基于EclipseSWT的应用程序中,我希望将图表的Javascript事件委托给嵌入Java代码(publishEventJavaSide和logToJavaContainer)。这非常适合重定向处理NVD3图表的javascript事件,javascript,eclipse,d3.js,swt,nvd3.js,Javascript,Eclipse,D3.js,Swt,Nvd3.js,我正在将NVD3集成到基于EclipseSWT的应用程序中,我希望将图表的Javascript事件委托给嵌入Java代码(publishEventJavaSide和logToJavaContainer)。这非常适合重定向element单击事件。element单击的代码如下所示: nv.addGraph(function () { try { function generateChart() { return nv.models.discreteBa
element单击事件。element单击的代码如下所示:
nv.addGraph(function () {
try {
function generateChart() {
return nv.models.discreteBarChart()
.x(function (d) {
return d.name
})
.y(function (d) {
return d.value
})
.staggerLabels(false)
.tooltips(true)
.showValues(true);
}
var chart = generateChart();
chart.dispatch.on('elementClick', function (e) {
publishEventJavaSide('elementClick', JSON.stringify(e, jsonCensor));
});
logToJavaContainer('TRACE', 'The JSON Data to be displayed in the chart sent by the server is the following: \n' + JSON.stringify(JSON.parse(generateData()), null, 4));
d3.select('#chart svg').datum(JSON.parse(generateData())).transition().duration(500).call(chart);
nv.utils.windowResize(chart.update);
return chart;
} catch (e) {
logToJavaContainer('ERROR', 'Error while running chart creation function' + JSON.stringify(e, ["message", "arguments", "type", "name", "stack"]));
}
});
在浏览了源代码之后,我想,chartClick
,elementDblClick
,elementMouseover
,elementMouseout
的任何一个都应该像elementClick
一样工作。但实际上,它们都不起作用。如果我为elementDblClick
尝试以下代码(仅更改事件名称):
它不起作用。包装捕获捕获到来自行chart.dispatch.on('elementDblClick',function(e)
)的以下错误:
运行图表创建功能时出错{
“消息”:“无法调用未定义的“on”方法”,
“名称”:“类型错误”,
“堆栈”:
TypeError:无法调用未定义的
在d3_调度处(http://127.0.0.1:10080/chart:1132:78)
在Object.eval[作为生成](eval
在(eval)
在(http://127.0.0.1:10080/rwt-参考资料/rap client.js:54872:27),:12:16)
在http://127.0.0.1:10080/chart:10440:21"
}
参考图表.dispatch
肯定不是未定义的(我用警报检查了一下,它是Object
),它来自某个地方的d3代码。我也非常确定,我的集成与此无关。我只能找到元素click
的示例
我不是Javascript、D3或NVD3专家,请耐心听我解释。您可以尝试:
chart.discretebar.dispatch.on("elementClick", function(e) {
console.log('elementClick', e);
});
工作非常完美。只有chartClick不起作用,但实际上它不会太打扰我。你是怎么知道的?如何从源代码中看到它的?我明白了。从源代码中可以看到。“nv.models.discreteBar=function(){…”。好的。
Error while running chart creation function{
"message":"Cannot call method 'on' of undefined",
"name":"TypeError",
"stack":
"TypeError: Cannot call method 'on' of undefined
at d3_dispatch.on (http://127.0.0.1:10080/chart:1132:78)
at Object.eval [as generate] (eval
at <anonymous> (eval
at <anonymous> (http://127.0.0.1:10080/rwt-resources/rap-client.js:54872:27)), <anonymous>:12:16)
at http://127.0.0.1:10080/chart:10440:21"
}
chart.discretebar.dispatch.on("elementClick", function(e) {
console.log('elementClick', e);
});