Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Slickgrid自定义排序_Javascript_Sorting_Slickgrid - Fatal编程技术网

Javascript Slickgrid自定义排序

Javascript Slickgrid自定义排序,javascript,sorting,slickgrid,Javascript,Sorting,Slickgrid,我试图在光滑的网格中实现自定义排序。我用这个作为参考。我想强制具有特定属性的行始终按网格底部排序。(我试图让slickgrid的一个工作示例在jsfiddle.net中工作,但我做不到。)我尝试过这个,但它不起作用 var gridData =[ { Id:1, Code: '232046', Depth2: 4000,}, { Id:2, Code: '23247', Depth2: 2000 }, { Id:3, Code: '12543', Depth2: 1500

我试图在光滑的网格中实现自定义排序。我用这个作为参考。我想强制具有特定属性的行始终按网格底部排序。(我试图让slickgrid的一个工作示例在jsfiddle.net中工作,但我做不到。)我尝试过这个,但它不起作用

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);
});
我错过了什么

 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
}  


注意:由于mime类型的问题,在Chrome中Fiddle不起作用,并且使资源
rawgithub
的常见解决方法似乎不起作用。

Origineil,很好的工作!你的建议让我成功了99%。我真的希望列在两个方向上都可以排序,并将行保持在底部。我修改了你的代码以考虑排序器,它的工作方式就像一个冠军

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);
});

这是最棒的。

你太棒了!既然你指出了我的问题所在。疯狂的我只能在firefox中使用小提琴。(Chrome和IE11不起作用)解释了Chrome的问题。我以前让它工作过,但这次由于某种原因它不会工作。小心最后一个
,否则如果
,那么
bb[footerOrderProperty]
应该是
bb
b[footerOrderProperty]
是的,我也发现了。我修正了小提琴和回音。再次感谢你的帮助!