通过addArrayItem实现,完整示例代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>GoJS Table Example</title> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/go.js"></script> <style> #myDiagramDiv { width: 400px; height: 300px; border: 1px solid black; } button { margin: 5px; } </style> </head> <body> <div id="myDiagramDiv"></div> <button onclick="addRow()">Add Row</button> <button onclick="deleteRow()">Delete Row</button> <script> function init() { const $ = go.GraphObject.make; // 创建 Diagram const myDiagram = $(go.Diagram, "myDiagramDiv", { initialContentAlignment: go.Spot.Center, "undoManager.isEnabled": true }); // 定义节点模板 myDiagram.nodeTemplate = $(go.Node, "Auto", $(go.Shape, { fill: "white" }), $(go.Panel, "Vertical", $(go.Panel, "Table", new go.Binding("itemArray", "items"), { defaultRowSeparatorStroke: "black", itemTemplate: $(go.Panel, "TableRow", $(go.TextBlock, { margin: 2 }, new go.Binding("text", "name")), $("Button", { margin: 2, click: function (e, obj) { const node = obj.part; if (node !== null) { const item = obj.panel.data; node.diagram.startTransaction("remove row"); node.diagram.model.removeArrayItem(node.data.items, node.data.items.indexOf(item)); node.diagram.commitTransaction("remove row"); } } }, $(go.TextBlock, "X") ) ) } ) ) ); // 初始化模型数据 myDiagram.model = new go.GraphLinksModel([{ key: 1, items: [ { name: "Row 1" }, { name: "Row 2" }, { name: "Row 3" } ] }]); // 全局变量,方便操作 window.myDiagram = myDiagram; } function addRow() { const node = myDiagram.model.nodeDataArray[0]; myDiagram.startTransaction("add row"); myDiagram.model.addArrayItem(node.items, { name: "New Row" }); myDiagram.commitTransaction("add row"); } function deleteRow() { const node = myDiagram.model.nodeDataArray[0]; if (node.items.length > 0) { myDiagram.startTransaction("delete row"); myDiagram.model.removeArrayItem(node.items, node.items.length - 1); myDiagram.commitTransaction("delete row"); } } // 初始化 init(); </script> </body> </html>
网友回复