2014-05-28 2 views
0

Я пытаюсь реализовать выборочную сортировку в слайде. Я использую это как ссылку https://github.com/mleibman/SlickGrid/wiki/DataView#sorting. Я хочу, чтобы строки с определенными свойствами всегда сортировались в нижней части сетки. (Я попытался получить рабочий пример slickgrid для работы в jsfiddle.net, но я не мог.) Я пробовал это, но он не работает.Пользовательская сортировка Slickgrid

var gridData =[ 
    { Id:1, Code: '232046', Depth2: 4000,}, 
    { Id:2, Code: '23247', Depth2: 2000 }, 
    { Id:3, Code: '12543', Depth2: 1500, rowoption_stickyorder: 1 } 
]; 

grid.onSort.subscribe(function (e, args) { 
    var footerOrderProperty = 'rowoption_stickyorder'; 

    var comparer = function (a, b) { 
     var result = (a[args.sortCol.field] > b[args.sortCol.field]) ? 1 : -1; 

     if (b[footerOrderProperty] != undefined || a[footerOrderProperty] != undefined) 
      result = -1; 

     return result; 
    } 
    dataview.sort(comparer, args.sortAsc); 
}); 

Что мне не хватает?

ответ

1
if (b[footerOrderProperty] != undefined || a[footerOrderProperty] != undefined) 
    result = -1; 

Не сработает. false || true помещает объект/строку с свойством выше одного, у которого его нет.

var bb = b[footerOrderProperty], 
    aa = a[footerOrderProperty]; 

if(aa && !bb){ 
    result = 1; 
} 
else if(!aa && bb) 
{ 
    result = -1 
} 

См my fiddle

Примечания: Скрипки не будут работать в Chrome из-за вопрос типа пантомимы и общий обходным путем создания ресурса rawgithub, кажется, не работают.

+0

Вы рок! Теперь, когда вы указали это, я вижу свою проблему. Сумасшедший, я могу заставить скрипту работать только в firefox. (Chrome и IE11 не работают.) – hewstone

+0

http://geekdave.com/2013/06/19/linking-raw-github-files-from-jsfiddle/ объясняет проблему Chrome. Я работал в прошлом, но на этот раз это не было бы по какой-то причине. – Origineil

0

Origineil, замечательная работа! Ваше предложение получило мне 99% пути. Я действительно хочу, чтобы столбцы сортировались в обоих направлениях и сохраняли строки внизу. Я изменил ваш код, чтобы принять во внимание sortOrder, и он работает как чемпион.

grid.onSort.subscribe(function (e, args) { 
    console.log(args.sortAsc) 
    var footerOrderProperty = 'rowoption_stickyorder'; 
    var comparer = function (a, b) { 
     var result = (a[args.sortCol.field] > b[args.sortCol.field]) ? 1 : -1; 

     var bb = b[footerOrderProperty], 
      aa = a[footerOrderProperty]; 

     if (aa && !bb) { 
      result = args.sortAsc ? 1 : -1; 
     } else if (!aa && bb) { 
      result = args.sortAsc ? -1 : 1; 
     } else if (aa != undefined && bb != undefined) { 
      result = (aa > bb) ? 1 : -1; 
      result *= args.sortAsc ? 1 : -1 
     } 

     console.log(a.id + " | " + b.id + " " + result) 
     return result 
    } 

    dataView.sort(comparer, args.sortAsc); 
}); 

Вот updated fiddle.

+0

Осторожно, что последнее 'else if',' bb [footerOrderProperty] 'должно быть либо просто' bb', либо 'b [footerOrderProperty]' – Origineil

+0

да, я тоже это понял. Я исправил и скрипку, и ответ. В очередной раз благодарим за помощь! – hewstone

Смежные вопросы