google visualization data.addRow - 从html数据属性中获取数据

时间:2013-12-12 14:22:34

标签: arrays google-visualization

我在数据属性中有数据,如下所示:

<div class="dashboard-module" data-rows="new Date(2013,10,04),12,"OR"##new Date(2013,10,17),2,"OR"##new Date(2013,10,09),2,"CA""></div>

我试图将此字符串拆分并在data.addRow函数中使用它:

      rows = el.data('rows');
      rowsarray = rows.split('##');
      // Error: Row given with size different than 3 (the number of columns in the table).
      $.each(rowsarray, function(index, value) {
        data.addRow( [value] );
      });
      // the following works
      data.addRow([new Date(2013,10,04),12,"OR"]);
      data.addRow([new Date(2013,10,09),2,"CA"]);
      data.addRow([new Date(2013,12,12),14,"AL"]);

我猜新日期内的逗号是否被视为数组的不同部分?

1 个答案:

答案 0 :(得分:1)

我假设您的data-rows属性中的双引号被转义(否则HTML会被错误标记)。

当您致电rowsarray = rows.split('##');时,您将获得一系列字符串,如下所示:

[
    'new Date(2013,10,04),12,"OR"',
    'new Date(2013,10,17),2,"OR"',
    'new Date(2013,10,09),2,"CA"'
]

不是数组数组。如果要将数据存储在HTML属性中,最好的办法是使用与JSON兼容的格式。然后问题变成存储日期,因为Date对象不是JSON兼容的,但这很容易解决。改为存储您的数据:

[["Date(2013,10,04)",12,"OR"],["Date(2013,10,17)",2,"OR"],["Date(2013,10,09)",2,"CA"]]

我使用data-rows属性做了两件事:首先,我将日期从new Date(2013,10,17)格式更改为类似"Date(2013,10,17)"的字符串。其次,我将字符串转换为数组数组的JSON字符串表示形式(使用标准的javascript数组括号[])。请注意,JSON要求对所有内部字符串使用双引号,因此您必须转义所有内部字符串以与data-rows属性一起使用,或者在data-rows属性字符串周围使用单引号(例如, :data-rows='<string>')。

然后,您可以解析该字符串以进入DataTable:

rows = JSON.parse(el.data('rows'));
// convert date strings to Date objects
for (var i = 0; i < rows.length; i++) {
    var dateStr = rows[i][0];
    var dateArr = dateStr.substring(5, dateStr.length - 1).split(',');
    rows[i][0] = new Date(dateArr[0], dateArr[1], dateArr[2]);
}
data.addRows(rows);