我正在尝试使用以下属性使 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问题的解决方案。 它在下面发布为答案。我仍然无法弄清楚下一个问题。
程序化取消选择:
如果我执行以下操作:
- 选择一个项目
- 以编程方式取消全选:
this._grid.clearSelection();
- 以编程方式选择另一个项目:
this._grid.select(row);
- 使两个项目看起来被选中。
这两个项目有不同的风格。不正确的有:
.claro .dojoDndItemAnchor, .claro .dojoDndItemSelected { ... }
正确的有:
.dgrid-selected
和以前一样,在监听dgrid-select
事件时,它会正确报告所选元素。
似乎这是导致我出现问题的默认 dojo DnD 模块。查看文档似乎我需要对选择器做一些事情。Selector 有一个名为的属性,singular
但我无法弄清楚如何/在哪里设置它。
单数信息:https ://dojotoolkit.org/reference-guide/1.9/dojo/dnd.html#id2