我有一个使用dataView来渲染学生成绩的slickGrid。我希望默认对网格进行排序,然后由id = 0和field =' Student'的列呈现网格。如何在网格渲染之前在此列上触发排序事件?
我之所以这样做是因为我有一个非常奇怪的错误,可以在这个视频中看到:
http://screencast.com/t/Oz0vlcsQPp
分拣机在第一次asc / des排序时工作正常,但随后它完全失控了。注意按照应有的方式排序。但是,如果我按学生名称排序,那么任何其他列上的分拣机都可以正常工作,无论我排序多少次都没有任何问题。如果我刷新页面,问题就会再次发生。
由于我甚至无法理解为什么会发生这种情况,我唯一的希望是最初对学生专栏进行排序并一起绕过问题。
注意:我在这里使用naturalSort.js:https://github.com/overset/javascript-natural-sort/blob/master/naturalSort.js。我不认为排序是问题,因为当我最初按学生名字排序时,它的工作正常......这个是我的大脑......
编辑:正如您在视频中看到的那样,我的网格单元格数据类似于" A(78.65%)"。我的数据结构如下所示:
"Column_3":{"displayValue":"A (100%)","sortValue":100.0},
"Column_4":{"displayValue":"B (87.53%)","sortValue":87.53},
"Column_5":{"displayValue":"?","sortValue":-1.0}
我发送了一个对象以进行排序,以便使用百分比作为排序标准。为了完成这项工作,我在网格选项中定义了dataItemColumnValueExtractor:
self.options["dataItemColumnValueExtractor"] = getItemColumnValue;
function getItemColumnValue(item, column) {
var values = item[column.field];
return values.displayValue !== undefined ? values.displayValue : values;
}
这允许我使用sortValue数据对网格进行排序。这是我的排序事件:
grid.onSort.subscribe(function(e, args){
var comparer = function(a, b) {
var result;
if (a[args.sortCol.field].sortValue !== undefined && a[args.sortCol.field].sortValue !== null && b[args.sortCol.field].sortValue !== undefined && b[args.sortCol.field].sortValue !== null) {
result = naturalSort(a[args.sortCol.field].sortValue,b[args.sortCol.field].sortValue);
}
else {
result = naturalSort(a[args.sortCol.field],b[args.sortCol.field]);
}
return result;
};
dataView.sort(comparer, args.sortAsc);
});
底线是一切正常,除了上面提到的排序问题...任何帮助将不胜感激...
答案 0 :(得分:1)
首先......你的第一次排序问题是可以修复的其他问题......
但是如果要对网格加载进行排序,可以触发click事件....
$(function () {
for (var i = 0; i < 50000; i++) {
var d = (data[i] = {});
d["num"] = i;
.
.
d["effortDriven"] = (i % 5 == 0);
}
dataView = new Slick.Data.DataView();
grid = new Slick.Grid("#myGrid", dataView, columns, options);
$('.slick-header-columns').children().eq(2).trigger('click'); // eq(2) for the 3rd col
}