Clarity Datagrid-尝试使用克隆对象设置选择不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Clarity Datagrid-尝试使用克隆对象设置选择不起作用相关的知识,希望对你有一定的参考价值。
[以单选模式使用datagrid时,呈现数据网格后-如果我们尝试通过更新绑定到[(clrDgSingleSelected)]
的变量来设置当前选择的值,即使在以下情况下,相应的单选按钮也不会被“选中”所设置的对象按值等于datagrid项之一。仅当对象通过引用datagrid中的一项相等时,选择才有效。
使用[(clrDgSelected)]
时,两种选择都观察到类似的行为。
重现行为的步骤:
- 在数据网格上使用一个清晰的文档示例,该示例显示用户列表并使用“ trackById”。
- 在组件构造函数中,尝试为单选设置值,但使用克隆的对象。
setTimeout(() => {
this.selectedUser = {...this.users[2]};
}, 4000);
在现实生活中-并不是故意克隆对象-但是已经有一个对象希望将其设置为选择对象,并且数据网格刚刚从服务器获取了新数据,它们都是新创建的对象。 datagrid中的对象之一与要选择的对象按值匹配,但不与按引用匹配。
Stackblitz(单选问题:https://stackblitz.com/edit/clarity-v2-dg-selection
Stackblitz(多次选择问题:https://stackblitz.com/edit/clarity-v2-dg-selection-multiple
我确实在Clarity(https://github.com/vmware/clarity/issues/4250)上打开了一个错误,但提到它是一个使用问题。
我希望Clarity团队的成员重新审视这种情况并提出解决方法/修复。
我在代码中也遇到了类似的问题,因为清晰度数据网格按引用进行比较。我正在采取以下方法从列表中识别选定的对象:
import {
intersectionBy as _intersectionBy,
differenceBy as _differenceBy,
uniqBy as _uniqBy }
from 'lodash';
private renewSelectedItems<EntityType>(datagridItemList: EntityType[], selected: EntityType[], matchProperty = 'id') {
const currentGridSelected = _intersectionBy(datagridItemList, selectedItems, matchProperty);
const selectedItemsNotInDatagridItemList = _differenceBy(selectedItems, datagridItems, matchProperty);
const selectedObjects = _uniqBy([...currentGridSelected, ...selectedItemsNotInDatagridItemList], matchProperty);
return selectedObjects;
}
每当刷新网格数据或选择更改时,我都将此方法称为renewSelectedItems
。
this.selected = this.renewSelectedItems(this.allItems, this.selected, 'id');
希望这会有所帮助。
以上是关于Clarity Datagrid-尝试使用克隆对象设置选择不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Lightroom’s Clarity Slider – What Does It Do?
使用 DataGrid 内的 DataTrigger 绑定到 DataRowView