在GoJS中,model用来存储表的基本数据,包括node、link等具体对象和属性,与其在视觉上的展现效果不相关。model中每每只保存相对简单的数据,最方便且持久化方法就是存成json或者xml这种格式的文本。
example:定义只有两个包含两个node的图(nodeDataArray的具体含义见下文)html
model.nodeDataArray = [ { key: "Alpha",text:"α" }, { key: "Beta" ,text:"β"} ];
此model没法检测到nodeDataArray数组的修改或任何节点数据对象的修改。若是要从nodeDataArray添加或删除节点数据,须要调用addNodeData或removeNodeData等方法。若是想要修改某个node对象,取决于你想修改的属性是model须要知道的结构属性仍是只适用于数据绑定或其余目的的属性。对于结构属性,须要调用以"set", "add", "insert", or "remove"等具体的方法,如 setKeyForNodeData
, setCategoryForNodeData
, GraphLinksModel.setToKeyForLinkData
, or GraphLinksModel.setGroupKeyForNodeData
等;对于第二种属性,如用于绑定并支持撤销/重作的属性,须要调用setDataProperty
方法。
每一个model都有本身的UndoManager,默认为禁用。 启用时须要将UndoManager.isEnabled设置为true,以使UndoManager记录model的更改,并为用户执行撤消和重作。node
每一个model均可以经过Model.addChangedListener
注册一个监听器,如下方法能够监听model结构属性的改变:json
"parentLinkCategory", 调用TreeModel.setParentLinkCategoryForNodeData时触发api
<div id="myDiagramDiv" style="width:100%; height:900px; background-color: #DAE4E4;"></div> <script> var $ = go.GraphObject.make; var diagram = $(go.Diagram, "myDiagramDiv", { initialContentAlignment: go.Spot.Center }); var nodeDataArray = [{ key: "Alpha" }, { key: "Beta" }]; var linkDataArray = [{ from: "Alpha", to: "Beta" }]; diagram.model.nodeDataArray = nodeDataArray; //model.nodeDataArray存储node的数据 diagram.model.linkDataArray = linkDataArray; //model.linkDataArray存储Link的数据 </script>