我有一個使用dataView渲染學生成績的slickGrid。我想在默認情況下按照id = 0和field ='Student'的列對網格進行排序。如何在網格呈現之前觸發此列上的排序事件?如何以編程方式強制排序在slickGrid上使用dataView?
爲什麼我想這樣做的原因是因爲我有一個非常奇怪的錯誤,可以在這個視頻中可以看出:
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);
});
底線是一切工作正常,除了與排序...任何幫助,將不勝感激上面提到的問題...
能否請你解釋如何能我修正了實際的排序問題?你聽起來好像你過去曾經處理過這類問題。對我來說問題是我看不到一個模式。如果我按學生名稱列排序,那麼所有的排序工作正常,這使我相信問題不是排序功能本身,而是網格設置中的某些東西。如果你想我可以提供你我的代碼... – Marko
我已經添加了一些額外的信息,關於我的代碼如何與一些示例數據和相關的網格代碼工作。我將不勝感激,如果你能在正確的方向點我... – Marko
我從來沒有遇到這個問題...但我認爲你缺少某處更新或渲染 –