DGrid - режим одиночного выбора при использовании перетаскивания -> результаты в нескольких выборках

Я пытаюсь заставить 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 работает. Выбор в основном работает. Иногда случается странное состояние. Это случаи:


Shift Select:

Если я выполню смену, то получу несколько элементов, выглядящих так, как будто они выбраны. К ним будут прикреплены следующие классы 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, который вызывает у меня проблемы. Глядя на документ, кажется, что мне нужно что-то сделать с селектором. Селектор имеет свойство под названием singular но я не смог понять, как / где это установить.

Информация о единственном числе: https://dojotoolkit.org/reference-guide/1.9/dojo/dnd.html

2 ответа

Решение

RE программный отмена, я думаю, что вы нашли законную ошибку dgrid. Я быстро взглянул на это и выдал запрос на удаление. Посмотрите, решит ли эта ревизия проблему для вас.

Можно предотвратить сдвиг Выберите проблему множественного выбора, используя 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();

До сих пор не выяснил, как бороться с программными изменениями.

Другие вопросы по тегам