次のプロパティを使用して 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
と、選択された要素が正しく報告されます。
選択した要素をドラッグしようとしても正しく動作します -> それらの 1 つだけが移動します。
編集: Shift Selectの問題に対する解決策を見つけました。 以下の回答として投稿されています。私はまだ次の問題を理解することができませんでした。
プログラムによる選択解除:
私が次のことをした場合:
- アイテムを一つ選べ
- プログラムですべての選択を解除します。
this._grid.clearSelection();
- プログラムで別の項目を選択します。
this._grid.select(row);
- 2 つのアイテムが選択されているように見えます。
2つのアイテムはスタイルが異なります。間違ったものには次のものがあります:
.claro .dojoDndItemAnchor, .claro .dojoDndItemSelected { ... }
正しいものは次のとおりです。
.dgrid-selected
以前と同様に、イベントをリッスンするdgrid-select
と、選択された要素が正しく報告されます。
これは、問題を引き起こしているデフォルトの dojo DnD モジュールのようです。ドキュメントを見ると、セレクターで何かをする必要があるようです。Selector にはプロパティがありますsingular
が、これを設定する方法/場所がわかりません。
特異点に関する情報: https://dojotoolkit.org/reference-guide/1.9/dojo/dnd.html#id2