提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:吴园园|2019-12-13 14:02:06.583|阅读 317 次
概述:开发图表应用程序不仅仅需要编写一些使用GoJS库的JavaScript代码。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
GoJS是一款功能强大,快速且轻量级的流程图控件,可帮助你在JavaScript 和HTML5 Canvas程序中创建流程图,且极大地简化您的JavaScript / Canvas 程序。
GoJS现已更新至最新版本2.1发布,修复了一些bug,增强用户体验,赶快下载试试吧~
调试节点面板设计
在构建自己的节点模板时,有时节点中的对象的大小和位置可能无法达到您想要的方式。重要的是要了解如何在面板中组装对象。您将要重新阅读:
使用GraphObjects构建
文字区块
形状
图片
面板
桌子面板
GraphObjects的大小
假设您要一个由两个TextBlock组成的节点,一个在另一个之上。您可以从以下开始:
diagram.nodeTemplate = $(go.Node, "Auto", $(go.Shape, { fill: "white" }), $(go.Panel, "Vertical", { margin: 3 }, $(go.TextBlock, new go.Binding("text", "t1")), $(go.TextBlock, new go.Binding("text", "t2")) ) ); diagram.model.nodeDataArray = [{ t1: "Top", t2: "Bottom"}];
但是,等等-您希望节点为固定大小。因此,您可以设置节点的宽度和高度:
diagram.nodeTemplate = $(go.Node, "Auto", { width: 80, height: 100 }, $(go.Shape, { fill: "white" }), $(go.Panel, "Vertical", { margin: 3 }, $(go.TextBlock, new go.Binding("text", "t1")), $(go.TextBlock, new go.Binding("text", "t2")) ) ); diagram.model.nodeDataArray = [{ t1: "Top", t2: "Bottom"}];
看起来更好,但是您很惊讶两个TextBlocks都在中心附近。这是为什么?出于调试目的,让我们更改每个TextBlock和嵌套面板的GraphObject.background颜色。
diagram.nodeTemplate = $(go.Node, "Auto", { width: 80, height: 100 }, $(go.Shape, { fill: "white" }), $(go.Panel, "Vertical", { background: "red" }, { margin: 3 }, $(go.TextBlock, { background: "lime" }, new go.Binding("text", "t1")), $(go.TextBlock, { background: "cyan" }, new go.Binding("text", "t2")) ) ); diagram.model.nodeDataArray = [{ t1: "Top", t2: "Bottom"}];
现在很明显,TextBlocks的大小不超过容纳文本的大小,Panel也不超过容纳两个TextBlocks的大小。
因此,您认为只需要GraphObject.stretch面板即可。
diagram.nodeTemplate = $(go.Node, "Auto", { width: 80, height: 100 }, $(go.Shape, { fill: "white" }), $(go.Panel, "Vertical", { background: "red" }, { margin: 3, stretch: go.GraphObject.Fill }, $(go.TextBlock, { background: "lime" }, new go.Binding("text", "t1")), $(go.TextBlock, { background: "cyan" }, new go.Binding("text", "t2")) ) ); diagram.model.nodeDataArray = [{ t1: "Top", t2: "Bottom"}];
现在具有红色背景的面板确实填满了整个外部汽车面板,在其主要形状内充当边框。但是,石灰绿色和青绿色的TextBlocks仍然只是它们的自然高度。
如果您希望文本在垂直方向上均匀间隔,您可能会认为您只需要拉伸这两个TextBlocks。
diagram.nodeTemplate = $(go.Node, "Auto", { width: 80, height: 100 }, $(go.Shape, { fill: "white" }), $(go.Panel, "Vertical", { background: "red" }, { margin: 3, stretch: go.GraphObject.Fill }, $(go.TextBlock, { background: "lime" }, { stretch: go.GraphObject.Fill }, new go.Binding("text", "t1")), $(go.TextBlock, { background: "cyan" }, { stretch: go.GraphObject.Fill }, new go.Binding("text", "t2")) ) ); diagram.model.nodeDataArray = [{ t1: "Top", t2: "Bottom"}];
现在,TextBlocks在水平而不是垂直拉伸!原因是垂直面板从不垂直拉伸其元素。它始终以其自然高度将其元素堆叠在一起。当垂直面板的高度超过其元素的堆叠时,底部将有多余的空间。
而不是垂直面板,我们应该使用表格面板。这需要在每个元素(即每个TextBlock)上分配GraphObject.row。
diagram.nodeTemplate = $(go.Node, "Auto", { width: 80, height: 100 }, $(go.Shape, { fill: "white" }), $(go.Panel, "Table", { background: "red" }, { margin: 3, stretch: go.GraphObject.Fill }, $(go.TextBlock, { background: "lime" }, { row: 0 }, new go.Binding("text", "t1")), $(go.TextBlock, { background: "cyan" }, { row: 1 }, new go.Binding("text", "t2")) ) ); diagram.model.nodeDataArray = [{ t1: "Top", t2: "Bottom"}];
因为默认情况下元素在表格面板的单元格中居中,所以不需要拉伸TextBlocks。(您可以通过设置Panel.defaultAlignment或Panel.defaultStretch来更改它。)
我们都做完了吗?也许。文本更改大小会怎样?一种测试方法是使用长短字符串使用不同的模型数据创建一堆节点。
但是,为了演示另一种调试技术,我们将使Node Part.resizable。您可以交互地调整节点的大小(整个节点,因为我们没有设置Part.resizeObjectName),因此您可以看到嵌套的Panel和TextBlocks如何处理约束的大小。
diagram.nodeTemplate = $(go.Node, "Auto", { resizable: true }, { width: 80, height: 100 }, $(go.Shape, { fill: "white" }), $(go.Panel, "Table", { background: "red" }, { margin: 3, stretch: go.GraphObject.Fill }, $(go.TextBlock, { background: "lime" }, { row: 0 }, new go.Binding("text", "t1")), $(go.TextBlock, { background: "cyan" }, { row: 1 }, new go.Binding("text", "t2")) ) ); diagram.model.nodeDataArray = [{ t1: "Top String", t2: "Bottom String"}]; diagram.findNodeForData(diagram.model.nodeDataArray[0]).isSelected = true;
请注意,当节点变窄时,它将如何剪切文本而不是自动换行。假设您希望文本自动换行。
这可以通过水平拉伸TextBlocks来实现,这将定义它们的宽度,从而迫使文本换行。但是,当文本方向从左到右时,文本通常绘制在TextBlock边界的左侧。如果希望每个TextBlock在其边界内居中,则需要将TextBlock.textAlign设置为“ center”。
diagram.nodeTemplate = $(go.Node, "Auto", { resizable: true }, { width: 80, height: 100 }, $(go.Shape, { fill: "white" }), $(go.Panel, "Table", { background: "red" }, { margin: 3, stretch: go.GraphObject.Fill, defaultStretch: go.GraphObject.Horizontal }, $(go.TextBlock, { background: "lime" }, { row: 0, textAlign: "center" }, new go.Binding("text", "t1")), $(go.TextBlock, { background: "cyan" }, { row: 1, textAlign: "center" }, new go.Binding("text", "t2")) ) ); diagram.model.nodeDataArray = [{ t1: "Top String", t2: "Bottom String"}]; diagram.findNodeForData(diagram.model.nodeDataArray[0]).isSelected = true;
可以看到TextBlocks沿可用区域的宽度延伸。请注意,随着节点变窄,文本如何换行,从而导致TextBlocks变得更窄。当然,如果没有足够的空间来渲染所有文本,则将剪切TextBlocks。
现在我们只需要除去用于调试的彩色背景和可调整大小性,并分配所需的颜色和字体即可。
diagram.nodeTemplate = $(go.Node, "Auto", { width: 80, height: 100 }, $(go.Shape, { fill: "white" }), $(go.Panel, "Table", { margin: 3, stretch: go.GraphObject.Fill, defaultStretch: go.GraphObject.Horizontal, background: "purple" }, $(go.TextBlock, { row: 0, textAlign: "center", stroke: "white", font: "bold 11pt sans-serif" }, new go.Binding("text", "t1")), $(go.TextBlock, { row: 1, textAlign: "center", stroke: "white", font: "bold 11pt sans-serif" }, new go.Binding("text", "t2")) ) ); diagram.model.nodeDataArray = [{ t1: "Top String", t2: "Bottom String"}];
====================================================
想要购买GoJS正版授权的朋友可以。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn
文章转载自:本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@capbkgr.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢