Dgrid:如何保存和保留列顺序?

Dgrid : How to save and persist column order?

我在 column reorder extension 中使用 dgrid。我在这里有两个问题 -

  1. 我看到在对列重新排序后,这些列以新的顺序出现在网格的 subRows 属性中(请注意,我在这里不是指 subRow ).这是获取列顺序的最佳方法还是有任何 alternate/better 方法可以做到这一点?

  2. 我知道我需要负责保存列顺序(或任何其他 属性)并恢复它。当我用保存的订单创建网格时,最好的方法是什么?我应该按保存的顺序创建列,还是可以按标准顺序创建它们,然后根据我保存的订单重新排序?如果后者可以,我该怎么做?

谢谢,

是的,subRows 可能是获取列顺序的最一致的方法。

关于 saving/restoring,我可以理解做如下的事情。请注意,为了简单起见,我在这里做了一些假设:

  1. 你只有一个子行(同样的方法可以用于多个,我想,但你需要外部循环)
  2. 每列引用一个唯一字段
  3. 您只针对 ES5+ 环境(因为我在下面使用 ES5 数组方法)

保存子行时,只保存每列引用的字段(这将使序列化变得微不足道):

var persistedSubRow = grid.subRows[0].map(function (column) {
    return column.field;
}

然后,在创建网格时,按默认顺序设置列的对象散列(如果没有持久设置,您可以使用它来设置 columns),但如果存在持久设置,请使用通过将其映射回哈希来确定顺序:

var columns = {
    field1: ...,
    field2: ...,
    ...
}

if (persistedSubRow) {
    persistedSubRow = persistedColumns.map(function (field) {
        var column = columns[field];
        // Normally when an object hash is specified for columns,
        // field is autodetected from the key.  Converting to array will
        // lose that, so set it within the object.
        column.field = field;
        return column;
    });
}

var grid = new Grid({
    // grid.columns accepts either an object or array as input
    columns: persistedSubRow || columns,
    ...
});

如果您 运行 遇到麻烦,请告诉我;我在这里从臀部拍摄,并没有测试以上内容。