我最近才开始使用 SlickGrid,遇到了类似的问题。
我是这样做的:
var options = { ... };
var dataView = ...;
// initialize columns with empty array
var columns = [];
// intialize myGrid with the empty columns
var myGrid = new Slick.Grid(
"#myGrid", dataView,
columns, options);
// initialize columns here (e.g. after loading dynamic column header data)
columns.push(
{id:"sel", name:"#", field:"num", sortable: true},
{id:"title", name:"Title", field:"title", sortable: true},
{id:"duration", name:"Duration", field:"duration", sortable: true});
// update the columns
myGrid.setColumns(columns);
你可能会问我为什么这样做。好吧,我有一些来自动态内容的列标题,并试图保持内容加载与我的行数据加载相同的方法。无论如何,当我以上述方式执行此操作时,其他所有内容(例如事件处理程序、行更新等)似乎都可以正常工作,除了您描述的奇怪的列重新排序行为。
经过反复试验并将我的代码与提供的示例进行比较后,我发现我的错误在于在初始化期间没有正确设置列。显然,当您使用空的 columns 数组调用 new Slick.Grid 时,会发生奇怪的行为。
我所做的修复它是简单地用一个虚拟的非空列数组初始化网格,然后稍后仍然调用 setColumns 来设置实际的列。例如
// intialize myGrid with dummy column array
var myGrid = new Slick.Grid(
"#myGrid", dataView,
[{id: "dummy"}], options);
在我进行这个单一更改后,其他一切都按预期工作。
我花了一点时间才弄明白,但我希望它对您或可能遇到类似问题的其他人有所帮助。