Я использую Ag-Grid и Angular для этого проекта, и то, что я пытаюсь сделать, - это настроить сочетания клавиш для изменения значения «Статус» выбранных строк, нажав соответствующие клавиши ('1' = 'статус завершен', так далее.). Существует встроенная функция onCellKeyPress()
, которая отслеживает нажатия клавиш после выбора строки или строк. Это отлично работает, у меня есть корпус переключателя, который отправляет значение в зависимости от того, какая клавиша нажата, например:
onCellKeyPress = (e: any) => {
switch(e.event.key) {
case '0': this.rowUpdates('New'); break;
case '1': this.rowUpdates('Completed'); break;
case '2': this.rowUpdates('Needs Attention'); break;
case '3': this.rowUpdates('Rejected'); break;
}
}
Он отправляет строку моей пользовательской функции rowUpdates()
, которая принимает значение, проходит через существующие узлы, ищет все, что выбрано, устанавливает значение для выбранных и помещает их в массив.
Теперь вот где начинаются проблемы. updateRowData
принимает 2 параметра, первый - это тип выполняемого обновления (добавление, удаление, обновление), в моем случае я использую последний и массив строк для изменения.
rowUpdates = (value: String) => {
let itemsToUpdate = [];
this.gridOptions.api.forEachNode(rowNode => {
if(rowNode.isSelected() === true) {
const selected = rowNode.data;
selected.status.name = value;
itemsToUpdate.push(selected);
console.log(itemsToUpdate);
}
});
this.gridOptions.api.updateRowData({update: itemsToUpdate});
}
Однако, когда я нажимаю клавишу, чтобы изменить значение строки, она обновляет каждую строку в моей сетке. Что еще более странно, так это то, что у меня есть метод, который добавляет класс в строку в зависимости от значения «Статус», и только строки, которые я намеревался изменить, получают этот класс.
Я в тупике. Я console.locked все в этой функции, и все они возвращаются с их предполагаемыми значениями. Массив всегда содержит выбранные узлы, и возвращаемое значение updateRowData всегда является тем же самым массивом. Я пробовал отключить forEachNode с getSelectedNodes
и getSelectedRows
, но безрезультатно. Любые идеи?