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と、選択された要素が正しく報告されます。

選択した要素をドラッグしようとしても正しく動作します -> それらの 1 つだけが移動します。

編集: Shift Selectの問題に対する解決策を見つけました。 以下の回答として投稿されています。私はまだ次の問題を理解することができませんでした。


プログラムによる選択解除:

私が次のことをした場合:

  1. アイテムを一つ選べ
  2. プログラムですべての選択を解除します。this._grid.clearSelection();
  3. プログラムで別の項目を選択します。this._grid.select(row);
  4. 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

4

2 に答える 2

3

RE プログラムによる選択解除、正当な 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 に答える