2014-04-04 57 views
0

我有一個使用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); 
    }); 

底線是一切工作正常,除了與排序...任何幫助,將不勝感激上面提到的問題...

回答

1

首先...您的問題進行第一次排序是別的東西可以固定...

但是,如果你要作爲排序依據電網負荷一處山坳,你可以觸發點擊事件....

$(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 
} 
+0

能否請你解釋如何能我修正了實際的排序問題?你聽起來好像你過去曾經處理過這類問題。對我來說問題是我看不到一個模式。如果我按學生名稱列排序,那麼所有的排序工作正常,這使我相信問題不是排序功能本身,而是網格設置中的某些東西。如果你想我可以提供你我的代碼... – Marko

+0

我已經添加了一些額外的信息,關於我的代碼如何與一些示例數據和相關的網格代碼工作。我將不勝感激,如果你能在正確的方向點我... – Marko

+0

我從來沒有遇到這個問題...但我認爲你缺少某處更新或渲染 –

相關問題