morris.js setData causes "Uncaught TypeError: Cannot re
morris.js setData causes "Uncaught TypeError: Cannot read property 'x' of undefined"
我正在尝试绘制一个条形图,当下拉选择更改时更新。
下面的代码包含在我的html文档中,并且leaveStayGraph函数被称为onChange of dropdown。每次在第一次调用leaveStayGraph之后,我得到以下错误:
Uncaught TypeError: Cannot read property 'x' of undefined
在后续调用之前(当调用setData时),leaveStayData看起来非常好(实际上它看起来与第一次调用时几乎相同,并且有效)。
var leaveStayChart = null;
function leaveStayGraph(display_data, date) {
/* Do stuff to get data */
// Draw Chart
var leaveStayData = {
element: 'leave_stay_pie_chart',
data: [{
label: "Stayed",
value: count
}, {
label: "Left",
value: total - count
}],
xkey: 'label',
ykeys: ['value'],
labels: ['Count'],
hideHover: 'auto'
};
if (leaveStayChart == null) {
// FIRST CALL
leaveStayChart = Morris.Bar(leaveStayData);
}
else {
// SUBSEQUENT CALLS
leaveStayChart.setData(leaveStayData);
}
}
我的最终目标是在改变下拉菜单的选择时更新图形,但是每次调用setData时,我都会得到这个错误,并且什么都没有显示。是否发生了我可以改变的事情
只是为了澄清,基本思想是这样的(一半取自morris.js的例子)。当按下按钮时,图表更新。
var x = Morris.Bar({
element: 'bar-example',
data: [
{ y: '2006', a: 100, b: 90 },
{ y: '2007', a: 75, b: 65 },
{ y: '2008', a: 50, b: 40 },
{ y: '2009', a: 75, b: 65 },
{ y: '2010', a: 50, b: 40 },
{ y: '2011', a: 75, b: 65 },
{ y: '2012', a: 100, b: 90 }
],
xkey: 'y',
ykeys: ['a', 'b'],
labels: ['Series A', 'Series B']
});
document.write("<button onClick='update()'>Test</button>");
function update() {
x.setData({
element: 'bar-example',
data: [
{ y: '2006', a: 100, b: 1 },
{ y: '2007', a: 75, b: 65 },
{ y: '2008', a: 46, b: 40 },
{ y: '2009', a: 43, b: 41 },
{ y: '2010', a: 50, b: 40 },
{ y: '2011', a: 3, b: 2 },
{ y: '2012', a: 30, b: 90 }
],
xkey: 'y',
ykeys: ['a', 'b'],
labels: ['Series A', 'Series B']
});
}
所以你在正确的轨道上,你只需要在JSON数据传递给setData而不是整个图形对象。这就是我修改后的代码:
var leaveStayChart = null;
function leaveStayGraph(display_data, date) {
/* Do stuff to get data */
var graphData = [{
label: "Stayed",
value: count
}, {
label: "Left",
value: total - count
}];
if (leaveStayChart == null) {
// FIRST CALL
leaveStayChart = Morris.Bar({
element: 'leave_stay_pie_chart',
data: graphData,
xkey: 'label',
ykeys: ['value'],
labels: ['Count'],
hideHover: 'auto'
});
}
else {
// SUBSEQUENT CALLS
leaveStayChart.setData(graphData);
}
}
问题是setData不接受传递给Morris.Bar(data)
的相同类型的对象。传入setData函数的对象是原始对象中data
下的值。
这将是修改后的示例代码:
var x = Morris.Bar({
element: 'bar-example',
data: [
{ y: '2006', a: 100, b: 90 },
{ y: '2007', a: 75, b: 65 },
{ y: '2008', a: 50, b: 40 },
{ y: '2009', a: 75, b: 65 },
{ y: '2010', a: 50, b: 40 },
{ y: '2011', a: 75, b: 65 },
{ y: '2012', a: 100, b: 90 }
],
xkey: 'y',
ykeys: ['a', 'b'],
labels: ['Series A', 'Series B']
});
document.write("<button onClick='update()'>Test</button>");
function update() {
x.setData([
{ y: '2006', a: 100, b: 1 },
{ y: '2007', a: 75, b: 65 },
{ y: '2008', a: 46, b: 40 },
{ y: '2009', a: 43, b: 41 },
{ y: '2010', a: 50, b: 40 },
{ y: '2011', a: 3, b: 2 },
{ y: '2012', a: 30, b: 90 }
]);
}
相关文章:
- 扩展SVGTextElement时出现Typescript Uncaught TypeError
- Uncaught TypeError:undefined不是函数-ember js
- Snap()方法导致Uncaught TypeError
- 尝试使用.ninnerHTMLlog打印数据,获取错误Uncaught TypeError:undefined不是函数
- Android/Javascript:Uncaught TypeError Object[Object]没有方法'
- Reactjs错误:babel runtime.js:32 Uncaught TypeError:超级表达式必须为nul
- Jquery,Uncaught TypeError:undefined不是函数
- JavaScript uncaught Typeerror
- Uncaught TypeError:$(..).find(..).oonce不是bootstrap/js/bootst
- jQuery-Uncaught TypeError:$不是函数
- Uncaught TypeError:对象原型在Symfony 2中只能是Object或ExtJS为null
- jQuery令牌输入轨道获取错误Uncaught TypeError:Object[Object Object]没有方法
- 在Meteor中使用fs模块获取Uncaught TypeError _fs2.default.readFile不是函数
- 用谷歌闭包编译器编译jQuery会产生Uncaught TypeError
- 正在节点d3.js之间创建链接,当前返回Uncaught TypeError:无法读取属性'weight'
- Uncaught TypeError:使用变量创建对象时,undefined不是函数
- 为什么我会得到错误Uncaught TypeError:无法设置属性'显示'在Javascript中未定
- React Uncaught TypeError:无法读取属性'替换'的未定义
- KendoUI TreeView试图将脏属性添加到Poco并获取Uncaught TypeError:e.slice不是
- Bourbon Refills Navigation JavaScript错误:Uncaught TypeError:u