1

我正在尝试使用以下属性使 DGrid 工作:

  • 拖放
  • 单选

不幸的是,这并不像我希望的那样容易。我像这样声明我的 DGrid:

this._grid = new (declare([OnDemandGrid, DijitRegistry, Selection, DnDGrid]))({
    store: this.store,
    columns: [
        {label: "ID", field:"id", sortable: false},
        ...
    ],
    touchesToScroll: 2, // Required to enable d&d on mobile
    dndSourceType: "grid-row",
    getObjectDndType: function(item){
        return [item.type ? item.type : this.dndSourceType];
    },
    selectionMode: "single"
}, this.gridDiv);
this._grid.startup();

在大多数情况下,这运作良好。DnD 正在工作。选择主要是工作。偶尔会出现一些奇怪的状态。这些是案例:


换档选择

如果我执行轮班选择,那么我将获得多个项目,看起来好像它们已被选中。它们将附加以下 css 类:

.claro .dojoDndItemAnchor, .claro .dojoDndItemSelected { ... }

在此处输入图像描述

监听dgrid-select事件时,它会正确报告所选元素。

尝试拖动所选元素也可以正常工作 -> 仅移动其中一个。

编辑:我找到了Shift Select问题的解决方案。 它在下面发布为答案。我仍然无法弄清楚下一个问题。


程序化取消选择

如果我执行以下操作:

  1. 选择一个项目
  2. 以编程方式取消全选:this._grid.clearSelection();
  3. 以编程方式选择另一个项目:this._grid.select(row);
  4. 使两个项目看起来被选中。

在此处输入图像描述

这两个项目有不同的风格。不正确的有:

.claro .dojoDndItemAnchor, .claro .dojoDndItemSelected { ... }

正确的有:

.dgrid-selected

和以前一样,在监听dgrid-select事件时,它会正确报告所选元素。


似乎这是导致我出现问题的默认 dojo DnD 模块。查看文档似乎我需要对选择器做一些事情。Selector 有一个名为的属性,singular但我无法弄清楚如何/在哪里设置它。

单数信息:https ://dojotoolkit.org/reference-guide/1.9/dojo/dnd.html#id2

4

2 回答 2

3

重新编程取消选择,我认为您发现了一个合法的 dgrid 错误。我快速浏览了一下这个并发出了一个拉取请求。看看该变更集是否为您解决了问题。

于 2014-04-25T04:24:18.100 回答
1

可以通过使用该字段 来防止Shift Select多选问题。dndParams

像这样实例化网格将解决问题:

this._grid = new (declare([OnDemandGrid, DijitRegistry, Selection, DnDGrid]))({
    store: this.store,
    columns: [
        {label: "ID", field:"id", sortable: false},
        ...
    ],
    touchesToScroll: 2, // Required to enable d&d on mobile
    dndSourceType: "grid-row",
    getObjectDndType: function(item){
        return [item.type ? item.type : this.dndSourceType];
    },
    selectionMode: "single",
    dndParams:{singular: true} // ADDED THIS.
}, this.gridDiv);
this._grid.startup();

仍然没有弄清楚如何处理程序化更改。

于 2014-04-23T21:55:14.917 回答