zoukankan      html  css  js  c++  java
  • (3)Gojs model简介

    (3)Gojs model简介

    在GoJS中,model用来存储表的基本数据,包括node、link等具体对象和属性,与其在视觉上的展示效果不相关。model中往往只保存相对简单的数据,最方便且持久化方法就是存成json或者xml这种格式的文本。
    example:定义只有两个包含两个node的图(nodeDataArray的具体含义见下文)

    model.nodeDataArray = [
       { key: "Alpha",text:"α" },
       { key: "Beta" ,text:"β"}
     ];
    

    ①修改model中的数据

    此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的更改,并为用户执行撤消和重做。

    ②model的监听事件

    每个model都可以通过Model.addChangedListener注册一个监听器,以下方法可以监听model结构属性的改变:

    • "nodeDataArray", Model.nodeDataArray数组被替换式触发
    • "nodeCategory", 调用Model.setCategoryForNodeData时触发
    • "nodeGroupKey", 调用GraphLinksModel.setGroupKeyForNodeData时触发
    • "linkDataArray", GraphLinksModel.linkDataArray数组被替换式触发
    • "linkFromKey", 调用GraphLinksModel.setFromKeyForLinkData时处罚
    • "linkToKey", 调用GraphLinksModel.setToKeyForLinkData时触发
    • "linkFromPortId", 调用GraphLinksModel.setFromPortIdForLinkData时触发
    • "linkToPortId", 调用GraphLinksModel.setToPortIdForLinkData时触发
    • "linkLabelKeys", 调用GraphLinksModel.setLabelKeysForLinkData时触发
    • "linkCategory", 调用GraphLinksModel.setCategoryForLinkData时触发
    • "nodeParentKey", 调用TreeModel.setParentKeyForNodeData时触发
    • "parentLinkCategory", 调用TreeModel.setParentLinkCategoryForNodeData时触发

    ③model的部分常用属性

    • nodeDataArray 获取或设置与图中的node,group或非链接部件对应的节点数据对象数组,初始值为空数组。
    • nodeKeyProperty 获取或设置返回每个node数据对象的唯一ID号或字符串的data属性的名称。
    • nodeCategoryProperty 获取或设置返回指定数据类别的字符串的node数据属性的名称。
    • name 获取或设置model的名称。
    • modelData 获取一个JavaScript对象,该对象可以保存整个model的中我们自定义的属性值,而不仅仅是一个node或一个link。
    • isReadOnly 获取或设置是否可以修改此model,例如添加node。
    • undoManager 获取或设置此model的underunderManger。
      更多的属性可以查看官方文档 Model Class,一个简单的demo:
    <div id="myDiagramDiv" style="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>
    

    ④model的常用方法后续补齐

  • 相关阅读:
    3星|《失败课》:投资人写给创业者的经验谈,有点标题党
    3星|《给你一门人工智能入门生意经》:机器所知胜于其所能言传
    3星|《财经》2018年第5期:西伯利亚冻土层的猛犸象牙是合法的,一根能卖到数万美元
    3星|《增长黑客》:增长黑客是一个牵强的概念
    2星|《只管去做》:做年度计划的入门级介绍,信息浓度太低
    创业者融资过程中需要了解的大坑小坑:《风投的技术》,4星
    4星|吴军《见识》:李开复上级的工作经验、投资经验与人生忠告
    4星|《基因转》:从孟德尔、达尔文到人类胚胎转基因
    3星|《人机平台》:数字化时代的三大类新的再平衡:人脑与机器、产品与平台,以及核心与大众
    3星|《知识的边界》:知识存在于网络中,分歧永远存在
  • 原文地址:https://www.cnblogs.com/Nancy-wang/p/6957791.html
Copyright © 2011-2022 走看看