我正在为一个新的Angular2项目测试令人敬畏的ag-Grid组件(非常酷!)。它应该用于显示带有“结构”(又名“树”)的CAD模型结构,每个节点都是CAD模型的属性。
现在,很有可能在ag-Grid中创建一个树。在最简单的形式中,data
属性包含节点的属性(CAD模型属性)。在这种情况下,我可以通过将属性editable: true
分配给columnDefs来轻松地使单元格可编辑。
然而,问题在于,如果在结构(树)的许多位置使用CAD模型,并且编辑了一个,则所有其他模型都不会更改。
相反,CAD模型(节点)实际上应该是对数据的引用,而不是数据本身。好吧,ag-Grid没问题。在这里,您可以看到具有复制节点的树与具有引用节点的树之间的比较:
ag-Grid的rowData:
rowData = [
{
data: { modelName: 'partA', weight: 12.5 }
children: [ ... ]
}
];
ag-Grid的列定义是:
{
headerName: 'weight',
field: 'weight',
editable: true
}
ag-Grid的rowData:
rowData = [
{
data: { model: MODEL_OBJECT }
children: [ ... ]
}
];
其中MODEL_OBJECT是对模型对象的javascript引用,例如:
var modelA = { modelName: 'partA', weight: 12.5 }
并将列定义更改为:
{
headerName: 'weight',
valueGetter: 'data.weight',
editable: true
}
请参阅?树中显示相同的属性,但实际上它们是从引用的POJS对象中获取的。因此,模型将在树中的用法中共享。
到目前为止一切顺利。但现在 - 由于该列有valueGetter
,因此列weight
无法直接编辑。更准确地说,ag-Grid允许编辑它,但它不会修改值。嗯,这是可以理解的,因为valueGetter充当映射函数,在另一个方向上可能不是“可逆的”。考虑类似'data.firstName + data.lastName'的内容:如果用户为列输入另一个值,那么全世界应该如何知道如何更新data.firstname
或data.lastName
。
我的问题:如何实现引用树节点的可编辑单元格的目标?预期的效果是,如果我在树的一个位置编辑CAD模型的属性,则网格会通过引用自动更新所有其他实例。