gojs进阶教程
在上节课中我们已经基本上掌握了如何利用gojs这个库来在浏览器上绘制一个简单的关系图,具体代码如下:
1 <!doctype html> 2 <html> 3 <head> 4 <script src="https://unpkg.com/gojs/release/go.js"></script> 5 <script> 6 function init() { 7 var $ = go.GraphObject.make; 8 myDiagram = $(go.Diagram, "myDiagramDiv"); 9 var nodeDataArray = [ 10 { key: "Alpha"}, 11 { key: "Beta" }, 12 13 { key: "Delta"}, 14 { key: "Gamma" } 15 ]; 16 var linkDataArray = [ 17 { to: "Beta", from: "Alpha" }, 18 { to: "Delta", from: "Alpha" }, 19 { to: "Gamma", from: "Alpha" } 20 ]; 21 myDiagram.model = new go.GraphLinksModel(nodeDataArray, linkDataArray); 22 23 24 } 25 </script> 26 </head> 27 <body onload="init()"> 28 <div id="myDiagramDiv" style="width:700px; height:150px"></div> 29 </body> 30 </html>
该段代码对应的关系图如下所示:
上面的关系图的节点外观过于简单,如果我们想要得到更美观一些的关系图,例如下面这样的该怎么做呢?这时候就需要利用到gojs提供的模板(template)了,模板相当于盛放节点的容器,你可以指定这个容器的形状,填充色等等。
要想实现上述美化后的关系图,只需要在原有的代码基础上做如下两处改动:
1 var nodeDataArray = [ 2 { key: "Alpha", color: "lime"}, 3 { key: "Beta",color: "cyan" }, 4 5 { key: "Delta",color: "pink"}, 6 { key: "Gamma" ,color: "maroon"} 7 ];
第一处改动是对nodeDataArray数组中的每个对象元素增加一个color属性用来指定节点的颜色。
1 myDiagram.nodeTemplate = 2 $(go.Node, "Auto", 3 $(go.Shape, "RoundedRectangle",
4 new go.Binding("fill", "color") 5 ), 6 $(go.TextBlock,
7 new go.Binding("text", "key") 8 ) 9 );
第二处改动是为视图myDiagram中盛放每个节点的容器nodeTemplate属性复制,为该容器赋值的构造器可以接收多个参数,第一个参数是类型参数,这里是go.Node,表示要改变节点的样式。第二个参数是容器内部的布局,这里是"Auto",它的含义是这个容器里至少包含两个元素,第一个元素会包裹容器里面其他的元素。第三个参数是go.Shape,它代表容器里的第一个元素,这里我们指定它的形状是圆角矩形,即"RoundedRectangle",new go.Binding("fill", "color")这句话用来设定每个节点容器的填充色,通过new关键字创建一个新的go.Binding数据绑定对象可以让我们把容器填充色属性fill和nodeDataArray中每个节点对象的color属性绑定,使得每个节点容器呈现出我们指定的内部填充色。第四个参数是go.TextBlock,它是文本框,new go.Binding("text", "key")这句话用来将文本框里的文字与nodeDataArray中每个节点的 key值绑定。由于设置了auto属性的缘故,文本框被包裹在圆角矩形里面。
除了可以把每个节点放在容器里来改变节点的外观外,我们还可以用类似的方法通过给视图myDiagram中负责管理边的linkTemplate属性赋值来调整边的样式,同样也只需要在原有的代码基础上做如下两处改动:
1 var linkDataArray = [ 2 { to: "Beta", from: "Alpha",color: "red" }, 3 { to: "Delta", from: "Alpha" }, 4 { to: "Gamma", from: "Alpha" } 5 ];
上面的代码在linkDataArray每个边对象属性中加入一个color属性将其值设为"red"。
1 myDiagram.linkTemplate = 2 $(go.Link, 3 $(go.Shape, { strokeWidth: 3 }, 4 new go.Binding("stroke", "color")), 5 $(go.Shape, 6 { toArrow: "Standard", stroke: null }, 7 new go.Binding("fill", "color")) 8 );
第二处改动是为视图myDiagram中linkTemplate属性复制,为该容器赋值的构造器可以接收多个参数,第一个参数是类型参数,这里是go.Link,表示用来改变连线(边)的样式。第二个参数是形状参数go.Shape,,它代表边的样式,这里我们指定边的粗细为3,new go.Binding("stroke", "color")这句话用来设定边的颜色,通过new关键字创建一个新的go.Binding数据绑定对象可以让我们把边颜色属性stroke和linkDataArray中每个边对象的color属性绑定,使得节点之间的边呈现出我们在linkDataArray里指定的颜色。第三个参数是形状参数go.Shape,,它代表箭头的样式,toArrow:" Standard "表示要在边的终点加上箭头, stroke:null表示是空心箭头; new go.Binding("fill", "color")这句话用来设定箭头的颜色,通过new关键字创建一个新的go.Binding数据绑定对象可以让我们把箭头颜色属性fill和linkDataArray中每个边对象的color属性绑定,使得箭头呈现出我们在linkDataArray里指定的颜色。
本节课的完整代码如下:
1 <!doctype html> 2 <html> 3 <head> 4 <script src="https://unpkg.com/gojs/release/go.js"></script> 5 <script> 6 function init() { 7 var $ = go.GraphObject.make; 8 myDiagram = $(go.Diagram, "myDiagramDiv"); 9 var nodeDataArray = [ 10 { key: "Alpha", color: "lime"}, 11 { key: "Beta",color: "cyan" }, 12 13 { key: "Delta",color: "pink"}, 14 { key: "Gamma" ,color: "maroon"} 15 ]; 16 var linkDataArray = [ 17 { to: "Beta", from: "Alpha",color: "red" }, 18 { to: "Delta", from: "Alpha" }, 19 { to: "Gamma", from: "Alpha" } 20 ]; 21 myDiagram.model = new go.GraphLinksModel(nodeDataArray, linkDataArray); 22 myDiagram.nodeTemplate = 23 $(go.Node, "Auto", 24 $(go.Shape, "RoundedRectangle", 25 new go.Binding("fill", "color") 26 ), 27 $(go.TextBlock, 28 new go.Binding("text", "key") 29 ) 30 ); 31 myDiagram.linkTemplate = 32 $(go.Link, 33 $(go.Shape, { strokeWidth: 3 }, 34 new go.Binding("stroke", "color")), 35 $(go.Shape, 36 { toArrow: "Standard", stroke: null }, 37 new go.Binding("fill", "color")) 38 ); 39 40 41 } 42 </script> 43 </head> 44 <body onload="init()"> 45 <div id="myDiagramDiv" style="width:700px; height:150px"></div> 46 </body> 47 </html>
原文地址:https://www.cnblogs.com/gezhaoatdlnu/p/12677630.html
- asp.net mvc脚手架代码生成工具
- Page.FindControl方法找不到指定控件的原因
- Silverlight 2 DispatcherTimer和通过XAML创建UI元素
- 腾讯移动安全实验室发布《2013年手机安全报告》
- 自定义Unity 容器的扩展 --- Unity Application Block Event Broker
- LINQ to SQL集成到应用程序中需考虑的一些问题
- WCF的追踪分析工具——SvcPerf
- 解决七牛云存储缓存加速Gravatar 头像图片路径url 参数失效的问题
- 命令行解析的规则以及Command Line Parser Library
- 简单代码让WordPress 支持电子邮箱(Email)作为登录名
- .NET Migration工具
- 如何有效监控.NET 应用程序
- 写入Ring Buffer
- Enterprise Library 4 缓存快速入门
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Entity Framework 小知识(五)
- Entity Framewor简单属性映射
- 面试官:生产服务器变慢了,你能谈谈诊断思路吗?
- 基础篇--(1)数据类型
- 控制反转_依赖注入简明教程
- vue3.0新特性初体验(一)
- Docker学习笔记-创建镜像
- Entity Framework 私有属性映射
- 还在手写CRUD代码?这款开源框架助你解放双手!
- Entity Framework 一对一关系映射
- Entity Framework 继承映射
- 原创 | 设计模式第二篇,链式方法模式
- 【Python】基于多列组合删除数据框中的重复值
- 一文搞懂JVM内存结构,程序员必须掌握的知识
- Doker容器