zoukankan      html  css  js  c++  java
  • gojs常用API (中文文档)

    常用API   操作类API

      API 例子 应用场景
    添加节点
    myDiagram.model.addNodeData(node);
    var node = {};
        node["key"] = "节点Key";
        node["loc"] = "0 0";//节点坐标
        node["text"] = "节点名称";
    myDiagram.model.addNodeData(node);
    通过按钮点击,添加新的节点到画布
    删除选中节点
    myDiagram.commandHandler.deleteSelection();
    if (myDiagram.commandHandler.canDeleteSelection()) {
        myDiagram.commandHandler.deleteSelection();
        return;
    }
    页面上有个按钮点击,可以删除选择的节点和线
    获取当前画布的json
    myDiagram.model.toJson()
    var model= myDiagram.model.toJson();获得整个画布的json
    //model=eval('('+model+')');若格式异常抓一下
    var nodes=model.nodeDataArray;取出所有节点
    var Links=model.linkDataArray;取出所有线
    获取当前画布的所有元素的json,用来保存
    加载json刷新画布
    myDiagram.model = go.Model.fromJson(model);
    model=myDiagram.model.toJson()
    myDiagram.model = go.Model.fromJson(model);
    一般用来刷新和加载画布上的元素
    通过节点key获取节点
    myDiagram.model.findNodeDataForKey('key')
    var node = myDiagram.model.findNodeDataForKey('key');
    知道节点key ,拿到这个节点的详细信息
    更改节点属性值
    myDiagram.model.setDataProperty(node, 'color', "#ededed");
    var node = myDiagram.model.findNodeDataForKey('key');//首先拿到这个节点的对象
    myDiagram.model.setDataProperty(node, 'color', "#ededed");//然后对这个对象的属性进行更改
    更改节点的颜色,或者大小等
    获取获得焦点的第一个元素,可为节点或者线
    myDiagram.selection.first()
    var node=myDiagram.selection.first();
            console.log(node.data.key);
     
    获取所有获得焦点的节点 myDiagram.nodes
    var items='';
      for(var nit=myDiagram.nodes;nit.next();){
            var node=nit.value;
           if(node.isSelected){
               items+=node.data.key+",";
             }
         }
     console.log(items);
     
    遍历整个画布的节点信息写法1  
    for(var nit=myDiagram.nodes;nit.next();){
                        var node=nit.value;
                        var key=node.data.key;
                        var text=node.data.text;
                    }
     
    给节点添加线
    myDiagram.model.addLinkData({ from: "节点的Key", to: "连到另一节点的key" })
       
    选中节点  
    var newdata = { "text":"AAAA", "key":-33,"loc":"0 0" };
                myDiagram.model.addNodeData(newdata);
                var newdat2= myDiagram.model.findNodeDataForKey('-3');
                console.log(newdat2);
                var node = myDiagram.findNodeForData(newdat2);
                console.log(node);
     myDiagram.select(node);//选中节点
     
    特殊案例API用法
    myDiagram.findNodeForData(objNode)
    myDiagram.findLinkForData(objLink)
    其中objNode或者objLink,只能从画布的json 对象取出,
    不能直接手写例如
    var newdata={"text":"AAAA","key":-33,"loc":"0 0"};
    var node = myDiagram.findNodeForData(newdat2);
    除了刚好是新建的节点外,,不然是获取不到这个对象的,因为添加节点时,gojs会自动给节点或者线添加一个属性
     

    常用事件定义API,和用法

    应用场景 关键字 例子 例子描述
    节点选中改变事件
    selectionChanged: 回调的函数方法名
    //该属性要写在$(go.Node,)内用大括号括起来,如右侧例子
    myDiagram.nodeTemplate =
       $(go.Node, "Horizontal",
            { selectionChanged: nodeSelectionChanged },
              //节点选中改变事件,nodeSelectionChanged为回调的方法名
            $(go.Panel, "Auto",
               $(go.Shape,//节点形状和背景颜色的设置
                    { fill: "#1F4963" },
                     new go.Binding("fill", "color")
               ),
            )
        );//go.Node的括号
     
    //回调方法
    function nodeSelectionChanged(node) {
          if(node.isSelected) {//
             //节点选中执行的内容
             console.log(node.data);//节点的属性信息
             console.log(node.data.key);//拿到节点的Key,拿其他属性类似
             var node1 = myDiagram.model.findNodeDataForKey(node.data.key);
             myDiagram.model.setDataProperty(node1, "fill", "#ededed");
          } else {
             //节点取消选中执行的内容
             var node1 = myDiagram.model.findNodeDataForKey(node.data.key);
             myDiagram.model.setDataProperty(node1, 'fill', "1F4963 ");       
          }
    }
    节点选中的时候是一种颜色,取消选中是另一种颜色
    节点双击事件
    doubleClick : function(e, node){
      //node为当前双击的节点的对象信息
     //该属性要写在$(go.node,)内用大括号括起来,如右侧例子
    }
    myDiagram.nodeTemplate =
       $(go.Node, "Horizontal",
            $(go.Panel, "Auto",
               $(go.Shape,//节点形状和背景颜色的设置
                    { fill: "#1F4963" },
                     new go.Binding("fill", "color")
               ),
               {doubleClick : function(e, node){// 双击事件
                                 handlerDC(e, node);//双击执行的方法
                              }
               }
            )
        );//go.Node的括号
     
    //双击执行的方法
    function handlerDC(e, obj) {
         var node = obj.part;//拿到节点的json对象,后面要拿什么值就直接.出来
         var procTaskId = node.data.key;
         var procTaskName = node.data.text;
         var description = node.data.description;
         var procTmplId = node.data.tmplId;
    }
    该例子主要应用场景为,双击节点,得到节点的详细信息,弹出窗口修改节点的信息,
    从Palette拖过来节触发的事件
    myDiagram.addDiagramListener("externalobjectsdropped", function(e) {
            console.log(e);
        })
     myDiagram.addDiagramListener("externalobjectsdropped", function(e) {
            e.subject.each(function(n){
                //得到从Palette拖过来的节点
                     console.log(n.data.key);
             });
        }) 
     
    当前画布被拖动的节点 未测试,线保存
    myDiagram.addDiagramListener("Modified", function(e) {
            myDiagram.isModified = false;
     
            iter = myDiagram.selection.iterator;
            
            while (iter.next()) {
                var part = iter.value;
                if (part instanceof go.Link) {
                   if ( ( part.data.from == 0 || part.data.from == undefined) || ( part.data.to == 0 || part.data.to == undefined )  ) {
                        myDiagram.model.setDataProperty(part.data, 'link-color', 'red');
                        console.log(part.data);
                        console.log("非法");
                   } else if(part.data.from > 0 || part.data.from < 0 ) {
                        var node = myDiagram.findNodeForKey(part.data.from);
                        if (!node) {
                            console.log("非法");
                        }
                   }else if(part.data.to > 0 || part.data.to < 0 ) {
                        var node = myDiagram.findNodeForKey(part.data.to);
                        if (!node) {
                            console.log("非法");
                        }
                   }
                }
            }
     
     

    画布基本定义类API

         
    定义gojs在全局的简洁符号(扯淡不知道怎么描述)
    var $ = go.GraphObject.make;
     
    定义画布的基本属性
    myDiagram = $(go.Diagram, "myDiagram", //画布绑定的Div的ID
                {
                      initialContentAlignment: go.Spot.Center, //画布的位置设置(居中,靠左等)
                      allowDrop: true, // must be true to accept drops from the Palette
                      "LinkDrawn": showLinkLabel, //
                      "LinkRelinked": showLinkLabel,
                      "animationManager.duration": 600, //画布刷新的加载速度
                      "undoManager.isEnabled": true,
                      //"toolManager.mouseWheelBehavior": go.ToolManager.WheelZoom,
                      allowZoom: true    //允许缩放,false为否
                      isReadOnly: false //是否禁用编辑 false否,    
    true是
      //ismodelfied:true //禁止拖拽
     
                      
                });
    没写的注释的就是忘了,
    这里绑定画布所用的div,并保存在myDiagram中,后续的节点设置均使用这个变量,意思是在这个画布上定义节点和操作节点
         
     

    画布元素属性定义类API

      api 例子
    定义单种节点
    myDiagram.nodeTemplate=$(go.Node,***)
    //***为对节点的定义
     
    myDiagram.nodeTemplate =
       $(go.Node, "Horizontal",
            { selectionChanged: nodeSelectionChanged },
              //节点选中改变事件,nodeSelectionChanged为回调的方法名
            $(go.Panel, "Auto",
                $(go.Shape,//节点形状和背景颜色的设置
                    { fill: "#1F4963", stroke: null }
                ),
                $(go.TextBlock,
                    { font: "bold 13px Helvetica, bold Arial, sans-serif",//字体
                      editable:true,
                      stroke: "white",//颜色
                      margin: 3 },
                      new go.Binding("text", "key")
                )//go.TextBlock,的括号
           )//go.Panel 的括号
        );//go.Node的括号
    定义多种节点(画布上有多种节点)
    myDiagram.nodeTemplateMap.add("A种节点",$(go.Node,***))
    //一种类型的节点
    myDiagram.nodeTemplateMap.add("Start",
           $(go.Node, "Spot",
                $(go.Panel, "Auto",
                     $(go.Shape, "Circle", {
                         minSize: new go.Size(40, 40),
                         fill: "#79C900",
                         stroke: null
                     })
                )
            )//go.Node的括号
    );
    //另一种类型的节点
    myDiagram.nodeTemplateMap.add("End",
           $(go.Node, "Spot",
                $(go.Panel, "Auto",
                     $(go.Shape, "Circle", {
                         minSize: new go.Size(40, 40),
                         fill: "#DC3C00",
                         stroke: null
                     })
                )
           )//go.Node的括号
    );
     
    //添加不同种类的节点
          var node = {};
          node["text"] = "2222";
          node["key"] = "33";
          node["loc"] = "0 0";
          node["category"] = "Start";//category
          myDiagram.model.addNodeData(node);
    定义线
    myDiagram.linkTemplate=$(go.Link,***);
     

    添加监听事件

    监听节点生成事件
    //添加监听节点生成事件
    myDiagram.addDiagramListener("externalobjectsdropped", function(e) {
            e.subject.each(function(n){
                    console.log(n.data.key);
               });
        })
    监听线生成事件
    //添加监听线生成事件
        myDiagram.addDiagramListener("LinkDrawn", function(e) {
               console.log(e.subject.data.to);
     
        })
    监听删除事件
    //监听节点删除事件
        myDiagram.addDiagramListener("SelectionDeleted", function(e) {
                e.subject.each(function(n){
                    console.log(n.data.key);
               });
        })

     

    go.Shape属性(形状)

    圆角矩形 RoundedRectangle  
     更多请查看API  https://gojs.net/latest/intro/shapes.html
     

    通用属性

    stroke 边框颜色 null为无边框,可填"#87CEFA","red"等
    margin 边框间距  
    visible 设置是元素是否可见 true为可见,false为不可见,
    textAlign 文本位置 "center"居中
    editable 文本是否可编辑 true,false
    font 字体 "bold 8pt Microsoft YaHei, Arial, sans-serif"
    fill 背景颜色 可填"#87CEFA","red"等
    alignment
    元素位置设置
    go.Spot.BottomLeft/左下    go.Spot.BottomRight/右下   go.Spot.TopLeft/左上 go.Spot.TopRight/又上
    alignment:go.Spot.TopRight
    isMultiline 编辑时是否允许换行 默认true
    maxLines:1,
    设置文本显示的最大行数  
    minSize:
    最小大小 new go.Size(10, 16),控制了最大大小后,文本就会自动换行了
    maxSize: 最大大小  
     

    特殊情况解决方案

    出现的问题 解决的方案
    节点或者线删除不了 检查,画布的全局设置是否禁用删除,或者节点,和线的设置禁用删除,关键字 isReadOnly,或者节点绑定的事件有问题
    重复调用定义画布报错 不能重复定义被绑定的div,应该用重新加载数据的API
     
     
     
     
    版权声明:本文为博主原创文章,转载请注明出处
    (后续还有更新.........)
  • 相关阅读:
    Java并发和高并发学习总结(三)- J.U.C之Atomic包
    Java并发编程和高并发学习总结(二)- Java内存模型
    Java并发编程和高并发学习总结(一)-大纲
    PHP之验证码识别
    python+flask+mongodb+whoosh实现自己的搜索引擎(一):目录
    个性化自己的二维码
    基于bootstrap3的 表格和分页的插件
    构建 shiro struts2 spring3 mybatis 的maven项目
    jsp 嵌套iframe 从iframe中表单提交并传值到外层
    构建 struts2 spring3 mybatis 的maven项目 构建 pom.xml
  • 原文地址:https://www.cnblogs.com/Zhushaoyu/p/9068943.html
Copyright © 2011-2022 走看看