【发布时间】:2016-07-29 04:28:33
【问题描述】:
我已经成功实现了一个谷歌可视化表格,并通过添加事件监听器为一列添加了自定义排序过程。
背景:数据来自数据库以呈现表格。我有几个表列带有“状态”列。此列应根据未显示表格的另一个数据字段进行排序。(所有数据都来自一个查询的数据库。它们都运行良好。)在 addListener 中,我对从数据库中获取的数组进行排序我的要求并通过table.draw(data, options); 重新创建表。
google.visualization.events.addListener(table, 'sort',
function(event) {
if(event.column == 4){
}
}
}
问题现在谷歌可视化表格在加载过程中总是按第二列排序。如果用户选择任何其他列来排序表将根据选定的列进行排序。它们都正常工作(按表头中的向下箭头排序的列显示)。
但是当我尝试按字段排序时,我添加了自己的排序过程,之前的排序没有被删除(我可以在之前排序的表格标题处看到向下箭头标记),因此添加的排序代码无法正常排序。如何防止此问题。
如果不清楚或需要更多信息,请告诉我。
更新:解释
从数据库创建的数组中绘制表格。这是结构
Array
(
[0] => Array
(
[Field 1] => test 1
[Field 2] =>test 2
[sortOrder] => 4
[Field 3] => Array
(
[key 1] => val 1
[Name] => test
[Date] => 2016-08-18 00:00:00
[warningLevel] => OK
)
)
....
....
...
在这个数组中,我使用 [Field 1]、[Field 2] 和 [warningLevel] 字段作为表格列。但是[warningLevel]column should sort according to [sortOrder] field in array。
所以我做了什么,我添加了侦听器并在其中重新排列(排序)整个数据数组并再次重新创建表。
google.visualization.events.addListener(table, 'sort',
function(event) {
if(event.column == 4){
vData.sort(function(a, b) {
var valueA, valueB;
valueA = a['sortOrder'];
valueB = b['sortOrder'];
if (valueA < valueB) {
return -1;
}
else if (valueA > valueB) {
return 1;
}
return 0;
});
table.draw(vdata, options);
}
});
所有其他表列应按正常方式排序(当用户对一列进行排序时,如果他移动到对另一列排序较早排序忽略并排序新选择的列。排序的列标题有箭头图标),他们工作正常。问题是当我尝试对状态列进行排序时,最后一个排序列仍然使用它的排序。标题中的箭头仍然显示在早期的排序列中。因此,此列排序无法按预期工作。
任何帮助将不胜感激。
【问题讨论】:
标签: javascript sorting google-visualization