Clarity Datagrid-尝试使用克隆对象设置选择不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Clarity Datagrid-尝试使用克隆对象设置选择不起作用相关的知识,希望对你有一定的参考价值。

[以单选模式使用datagrid时,呈现数据网格后-如果我们尝试通过更新绑定到[(clrDgSingleSelected)]的变量来设置当前选择的值,即使在以下情况下,相应的单选按钮也不会被“选中”所设置的对象按值等于datagrid项之一。仅当对象通过引用datagrid中的一项相等时,选择才有效。

使用[(clrDgSelected)]时,两种选择都观察到类似的行为。

重现行为的步骤:

  1. 在数据网格上使用一个清晰​​的文档示例,该示例显示用户列表并使用“ trackById”。
  2. 在组件构造函数中,尝试为单选设置值,但使用克隆的对象。
    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-尝试使用克隆对象设置选择不起作用的主要内容,如果未能解决你的问题,请参考以下文章

仅在实体对象的 DataGrid 中显示某些列

克隆解析服务器对象

Lightroom’s Clarity Slider – What Does It Do?

使用 DataGrid 内的 DataTrigger 绑定到 DataRowView

WPF DataGrid MultiBinding到DataGrid ItemSsource中的类

在 TypeScript 中克隆对象数组