SlickGrid:如何阻止某些列被重新排序?

SlickGrid : How to stop certain columns from being reordered?

我需要停止对 SlickGrid 中的某些列进行重新排序。我只是找不到办法。在 'resizable' 或类似的情况下,每一列都没有允许重新排序的选项。下面的标志使所有列 'reorder-able' :

var options = {
  enableColumnReorder: true
};

如果有任何解决方法,请告诉我。 TIA

您实际上可以明确禁用列重新排序并设置您需要的每个列sortable

例如:

var columns = [
    { id: "title", name: "Title", field: "title", sortable: false },
    { id: "duration", name: "Duration", field: "duration", sortable: true, formatter: dayFormatter },
    { id: "%", name: "% Complete", field: "percentComplete", sortable: true },
    { id: "start", name: "Start", field: "start", formatter: dateFormatter, sortable: true },
    { id: "finish", name: "Finish", field: "finish", formatter: dateFormatter, sortable: true },
    { id: "effort-driven", name: "Effort Driven", field: "effortDriven", sortable: true }
  ];

取自他们的例子here

添加:列选项的文档 - https://github.com/mleibman/SlickGrid/wiki/Column-Options

不幸的是,没有直接的选项来实现这一点,但如果我们探索源代码,我们会发现它们使用 jquery 可排序插件。所以我们可以 "inject" 进入 sortable 调用,为 `sortable 插件添加选项 cancelitems

在列选项中:

headerCssClass: "disable-reorder"

初始化中:

var origSortable = $.fn.sortable;
$.fn.sortable = function (options) {
  if (options !== null && typeof options === 'object'){
    options.cancel = '.disable-reorder';
  }
  return origSortable.apply(this, arguments);
};

data = [
  //some data
];
grid = new Slick.Grid("#myGrid", data, columns, options);

这将防止 headers 和 class .disable-reorder 无法重新订购。

这是一种丑陋而笨拙的方式,但我找不到任何其他选择。

Full fiddle