Dojo Dgrid选择组合与订单一起出现问题

Dojo Dgrid选择组合与订单一起出现问题,dojo,dgrid,Dojo,Dgrid,我对dgrid选择与多重选择的混合一直存在问题 使用选择属性(例如) 它按预期返回一个行ID数组。然而,这些ID的顺序似乎是“任意的”。似乎选择的顺序可能有影响 在任何情况下,在datatable中,我都希望返回所选行,以便它们在列表中显示,而不是在列表中显示 我可以使用dojo.query(“.dgrid selected”,datatable.domNode)以正确的顺序获取它们,并使用HTML元素获取行数据,但这似乎是一种黑客行为 我在SitePen文档中找不到合适的方法来执行此操作。有人

我对dgrid选择与多重选择的混合一直存在问题

使用选择属性(例如)

它按预期返回一个行ID数组。然而,这些ID的顺序似乎是“任意的”。似乎选择的顺序可能有影响

在任何情况下,在datatable中,我都希望返回所选行,以便它们在列表中显示,而不是在列表中显示

我可以使用
dojo.query(“.dgrid selected”,datatable.domNode)
以正确的顺序获取它们,并使用HTML元素获取行数据,但这似乎是一种黑客行为


我在SitePen文档中找不到合适的方法来执行此操作。有人吗?

我认为没有直接的方法可以做到这一点。
Object.keys(datatable.selection)
按选定行的顺序返回ID数组。您可以使用
d-grid
和JS的一些内置函数来实现这一点。以下是步骤:

  • 通过
    Object.keys
    获取id

    var selected=Object.keys(datatable.selection)

  • 创建一个对象列表,包括元素的id和
    rowIndex
  • 代码:

    var-dataList=[];
    对于(变量i=0;i
  • 使用
    索引
    作为属性对列表进行排序:
  • dataList.sort(函数(a,b){返回a.index-b.index;})


    生成的
    dataList
    将按对象在网格中的显示顺序列出对象列表。

    谢谢。工作得很好。我的另一种方法,使用dom对象也很有效,但我真的认为这更像是一种黑客行为。@DanPiccolo:很高兴我能帮上忙。是的,对我来说,使用DOM更像是一种黑客行为。我还倾向于使用
    d-grid
    @Himanshu提供的内置方法:如果在第一页选择了一些行后,我点击了列上的sort,会怎么样。结果,所选行转到网格中的其他页面。元素在这种情况下将变为null,因此选择[i])。element.rowIndex将不起作用。在这种情况下,我如何获得正确的索引?@Vicky:我认为这里遵循的惯例是,当数据排序或页面更改时,选择应该自动清除。通过这样做,用户必须再次选择行,您可以正确地获得
    元素
    行索引
    var selected = Object.keys(datatable.selection)
    
    var dataList= [];
    for(var i=0; i< selected.length; i++){
        dataList.push({id: selected[i], index: datatable.row(selected[i]).element.rowIndex});
    }