【问题标题】:Chart won't draw. Returning a string value not a Number value - Meteor - Chartjs图表不会绘制。返回字符串值而不是数字值 - Meteor - Chartjs
【发布时间】:2015-09-09 23:38:07
【问题描述】:

所以我正在尝试在meteor中使用chartjs构建一个饼图。

我很确定问题在于优先顺序在这里讨论。

我需要这个顺序的对象

{
    value: 900.65,
    color:"#red",
    highlight: "#FF5A5E",
    label: "income"
}

但我按这个顺序得到它

{
    color: "#red"
    highlight: "#FF5A5E"
    label: "income"
    value: 900.65
}

这是我的循环

    function drawExpPie(){
  data = [];
  var Task = Tasks.find({},{fields:{value:1,text:1}}).fetch();
  for(var i = 0; i < Task.length; i++)  {
    var newdataset = {
      label:Task[i].text,
      highlight: "#FCA456",
      color: "red",
      value:Task[i].value,
      };
    data.push(newdataset);
  }
  console.log(data);
  var context = document.getElementById('myExpChart').getContext('2d');
  var myPieChart = new Chart(context).Pie(data);
}

Template.exp.helpers({
  exp: function() {return Session.get("exp");}
});

Template.exp.rendered = function(){
  drawExpPie();
};

感谢任何帮助。谢谢

【问题讨论】:

  • 到底是什么问题?有什么错误会导致您考虑优先级吗?
  • javascript 中的对象没有任何保证顺序。此外,您的两个对象具有不同的字段值。是否有您正在谈论但未显示的数组?我很困惑。你的 for 循环也不能产生第一个对象(不同的值)。
  • 财产顺序无关紧要。您要解决的实际问题是什么?
  • 如果您的data 变量实际上是一个数组,那么data.push()不会“重置”该数组。每次它都会附加到数组的末尾。一定有一些你误解的东西,或者你没有向我们展示的东西。此外,我将重申其他有关对象内属性顺序的 cmets:这无关紧要。如果您编写代码的顺序确实很重要,例如for-in 循环,那么您很可能做错了。当然,chart.js 之类的代码不会依赖于对象内属性的顺序。
  • 顺便说一句,代码无意中使 data 成为全局变量。这可能会把事情搞砸,具体取决于代码的其他功能。应该是var data = [];

标签: javascript arrays meteor push chart.js


【解决方案1】:

value:Task[i].value改为

 value:Task[i].value || 0,

【讨论】:

  • 我试过了,没有骰子。我也试过 label:Task[i].text || " ",
【解决方案2】:

这解决了它...

    for(var i = 0; i < Task.length; i++)  {
    data.push({
      label: Task[i].text,
      highlight: "#FF5A5E",
      color:"#F7464A",
      value: Number(Task[i].value)
      });
  }

Keynote : value: Number(Task[i].value) 也可能会起作用。

【讨论】:

    猜你喜欢
    • 2014-02-14
    • 2011-05-18
    • 1970-01-01
    • 2013-08-12
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多