在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>