【问题标题】:Dgrid selection mix-in issue with orderDgrid选择与订单混合问题
【发布时间】:2017-06-29 15:53:46
【问题描述】:

我在 dgrid 选择与多选混合时遇到了问题。

使用选择属性(例如)

var selected = Object.keys(datatable.selection)

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

无论如何,在数据表中,我希望返回选定的行,以便它们显示在列表中,但它们不会。

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

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

【问题讨论】:

    标签: dojo dgrid


    【解决方案1】:

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

    1. 通过Object.keys获取id。

      var selected = Object.keys(datatable.selection)

    2. 创建一个包含 id 和 rowIndex of element 的对象列表

    代码:

    var dataList= [];
    for(var i=0; i< selected.length; i++){
        dataList.push({id: selected[i], index: datatable.row(selected[i]).element.rowIndex});
    }
    
    1. 使用index作为属性对列表进行排序:

    dataList.sort(function(a, b){ return a.index- b.index; })

    生成的dataList 将具有对象列表,这些对象按照它们在网格中出现的顺序排列。

    【讨论】:

    • 谢谢。工作得很好。我的另一种方法,使用 dom 对象也有效,但我真的认为这更像是一种 hack。
    • @DanPiccolo:很高兴我能帮上忙。是的,使用 DOM 对我来说似乎也更像是一种 hack。我也倾向于使用d-grid提供的内置方法。
    • @Himanshu:如果在第一页中选择了一些行之后,我在列上按了排序。结果,所选行转到网格中的其他页面。在这种情况下 element 将变为 null ,因此 selected[i]).element.rowIndex 将不起作用。在这种情况下如何获得正确的索引?
    • @Vicky:我认为这里要遵循的约定是,当数据排序或页面更改时,选择应该自动清除。通过这样做,用户将不得不再次选择行,您可以正确获取elementrowIndex
    猜你喜欢
    • 1970-01-01
    • 2022-01-07
    • 2020-07-20
    • 2018-02-09
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    相关资源
    最近更新 更多