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

时间:2015-09-12 07:04:40

标签: javascript dojo dgrid

我正在使用带有column reorder extension的dgrid。我有两个问题 -

  1. 我看到重新排序列后,列在subRows网格中的新订单中显示(请注意,我此处未提及subRow)。这是获得列顺序的最佳方式还是有任何替代/更好的方法来执行此操作?

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

  3. 谢谢,

1 个答案:

答案 0 :(得分:1)

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

关于保存/恢复,我可以理解做类似以下的事情。请注意,为简单起见,我在这里做了一些假设:

  1. 你只有一个子行(相同的方法可以用于多个,我想,但你需要外部循环)
  2. 每列引用一个唯一字段
  3. 您只定位ES5 +环境(因为我使用下面的ES5数组方法)
  4. 保存子行时,只保存每列引用的字段(这将使序列化变得微不足道):

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

    如果你遇到麻烦,请告诉我。我在这里从臀部开始拍摄,并没有测试过上面的内容。