ag-grid:引用节点的分层树:如何使引用的属性可编辑?

时间:2016-02-25 15:29:04

标签: javascript ag-grid

我正在为一个新的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.firstnamedata.lastName

我的问题:如何实现引用树节点的可编辑单元格的目标?预期的效果是,如果我在树的一个位置编辑CAD模型的属性,则网格会通过引用自动更新所有其他实例。

1 个答案:

答案 0 :(得分:1)

ag-Grid中valueGetter的反转是newValueHandler。它解释了here。您可以在colDef上定义newValueHandler,然后您可以自由地在值中执行任何操作。

npm install