一文详解GoJs中go.Panel的itemArray属性

目录
  • 前言
  • itemArray属性的使用
    • 只包含一种绘图模板的渲染列表
    • 包含不同的绘图模板的渲染列表
    • 内部多个绘图模板的不同列的行循环
  • 总结

前言

上一篇文章中,为了演示go.panel内部元素的折叠展开,也是为了举例子比较简单。使用了一个go.Panel的属性itemArray,本文将详细的介绍一下itemArray属性。

itemArray属性的使用

只包含一种绘图模板的渲染列表

//data
nodes: [
    {
      key: 1,
      text:"三国",
      list1: ["魏", "蜀", "吴"]
    },
],
//methods
this.myDiagram.nodeTemplate = $$(
go.Node,
"Auto",
$$(go.Shape, "Rectangle", { fill: "#67B73C",width:100,height:100 }),
$$(
  go.Panel,
  "Table",
  { column: 0 },
  $$(go.TextBlock, {
    column: 0,
    margin: new go.Margin(3, 3, 0, 3),
    font: "bold 12pt sans-serif",
  },new go.Binding("text", "text")),
  $$("PanelExpanderButton", "LIST1", { column: 1 }),
  $$(
    go.Panel,
    "Vertical",
    { name: "LIST1", row: 1, column: 0, columnSpan: 2 },
    new go.Binding("itemArray", "list1")
  )
)
);

可以看出在节点内部如果出现了很多样式和显示位置都相同的元素,也就是渲染列表。就可以使用itemArray属性。然后配置的属性值必须为数组,否则则会报错。

包含不同的绘图模板的渲染列表

在真实的需求开发中,可能在需要处理的渲染列表中不是只有一种绘图模板。需要有其他的绘图模板配合使用,这时就需要结合itemTemplate属性进行结合使用。其使用方法如下

let itemTemplates = $$(go.Panel, "Auto",
    { margin: 2 },
    $$(go.Shape, "RoundedRectangle",
    { fill: "#FF9900" }),
    $$(go.TextBlock, new go.Binding("text", ""),
    { margin: 2 })
)
this.myDiagram.nodeTemplate = $$(
    go.Node,
    "Auto",
    $$(go.Shape, "Rectangle", { fill: "#67B73C",width:150,height:150 }),
    $$(
      go.Panel,
      "Table",
      { column: 0 },
      $$(go.TextBlock, {
        column: 0,
        margin: new go.Margin(3, 3, 0, 3),
        font: "bold 12pt sans-serif",
      },new go.Binding("text", "text")),
      $$("PanelExpanderButton", "LIST1", { column: 1 }),
      $$(
        go.Panel,
        "Vertical",
        { name: "LIST1", row: 1, column: 0, columnSpan: 2,itemTemplate:itemTemplates },
        new go.Binding("itemArray", "list1")
      )
    )
  );

由此可以发现,可以给go.Panel配置itemTemplate属性。在配置nodeTemplate属性的时候,有两种方式,第一种是我们在nodeTemplate重新声明模板,或者是直接nodeTemplate后面直接写对应的配置项。这里推荐第一种方式,因为写在内部的话会把整个节点配置模板显得很乱。而在上面的示例中使用的go.Shapego.TextBlock来示例说明,在实际开发中可以使用更多的绘图模板在其内部进行配置。

内部多个绘图模板的不同列的行循环

在很多时候,对渲染列表的展示主要是以一种key、value的键值对的形式表现。而事实上会有很多键值对以表格的形式进行展示,并且我们还可以配置不同其他属性,下面是配置了stroke属性的键值对配列。示例如下

let itemTemplates = $$(go.Panel, "TableRow",
    $$(go.TextBlock, new go.Binding("text", "name"),new go.Binding("stroke", "color"),
    { column: 0, margin: 2, font: "bold 10pt sans-serif" }),
    $$(go.TextBlock, new go.Binding("text", "info"),new go.Binding("stroke", "color"),
    { column: 1, margin: 2 }),
)
this.myDiagram.nodeTemplate = $$(
go.Node,
"Auto",
$$(go.Shape, "Rectangle", { fill: "#67B73C",width:150,height:150 }),
$$(
  go.Panel,
  "Table",
  $$(go.TextBlock, {
    column: 0,
    margin: new go.Margin(3, 3, 0, 3),
    font: "bold 12pt sans-serif",
  },new go.Binding("text", "text")),
  $$("PanelExpanderButton", "LIST1", { column: 1 }),
  $$(
    go.Panel,
    "Table",
    { name: "LIST1", row: 1, column: 0, columnSpan: 2,itemTemplate:itemTemplates },
    new go.Binding("itemArray", "list1")
  )
)
);

这种情况的列表键值对的形式,可以在itemTemplate配置其面板属性为TableRow,只需要配置column第几列的绘图模板,这个是时候行就会进行循环展示,还可以对每一列的属性通过go.Binding进行动态配置属性的显示。

注意:itemTemplate内部设置TableRow的时候,其外部的go.Panel属性必须是Table,否则将无法显示

总结

对于类似vue中v-for的渲染列表,在gojs内部也同样存在,通过itemArray属性来配置一个数组进行渲染,如果需要配置的属性过多,也可以在节点内配置多个属性,然后再itemTemplate绘图模板中进行解构出来就可以了。除了上述几种示例之外,也可以把其他的绘图模板例如go.Group、go.Picture等等汇聚到itemTemplate里面。

以上就是一文详解GoJs中go.Panel的itemArray属性的详细内容,更多关于GoJs go.Panel itemArray属性的资料请关注我们其它相关文章!

(0)

相关推荐

  • GoJs连线绘图模板Link使用示例详解

    目录 前言 go.link的简单使用 go.Link的属性配置 routing属性 curve属性 corner.toEndSegmentLength.fromEndSegmentLength.fromShortLength.toShortLength属性 selectable.fromSpot.toSpot属性 总结 前言 可视化图形中除了携带很多信息的节点(node)之外,还需要知道他们之间的关系,而链接他们之间的连线在gojs中是使用go.link进行绘制.在渲染的时候我们根据数据的fro

  • GoJs中使用HTML方法示例

    目录 前言 使用html的方式 提示信息的html交互 右键菜单的html交互 文本编辑的html交互 总结 前言 在gojs中因为有自己的绘图模板和一些语法限制,实际上都是在canvas标签的特性上进行的封装.但是有些时候其拓展就不能满足需求的时候,可以对其和html结构进行一些交互,达到自己显示上的特殊需求的展示. 使用html的方式 本文将从提示信息.右键菜单.和文本编辑三个方面来体现gojs和html之间的交互.而对于html的使用交互过程中,最主要考虑到的就是html信息何时展示,何时

  • 详解GoJs节点的折叠展开实现

    目录 前言 节点折叠展开的不同情况 树形布局特有的属性后代节点的折叠展开 go.Group(组)的内部元素的展开折叠 go.Panel(面板)的内部元素的展开折叠 总结 前言 前面的文章中提到了提示信息(toolTip)在节点信息内容过多的时候,需要节点信息的内容进行隐藏,在鼠标移入的时候进行未显示信息的提示框形式的选中,本文讲从另外的角度处理在画布上的可视化图形的内容过多的时候的处理情况,一种是把节点的内部的折叠和展开,另外一种就是对部分节点进行折叠和展开. 节点折叠展开的不同情况 对于节点的

  • GoJs中导出图片或者SVG实现示例详解

    目录 前言 导出图片和SVG的使用 导出图片的使用方法 导出SVG的使用方法 总结 前言 在可视化图形的分析中,对基础图形进行增删改之后.除了保存修改之后的可视化数据之外.还需要保存为图片或者svg进行分享. 导出图片和SVG的使用 导出图片和导出SVG相似,只是调用的生成方法不同.而生成图片有两种方法分别为makeImage和makeImageData.而生成SVG只有makeSvg方法.其准备工作沿用之前的数据.添加生成image和svg的按钮. //html <button @click=

  • GoJs中标题和缩略图使用技巧

    目录 前言 标题的使用 随图形变化的标题 不随图形变化的标题 缩略图的使用 总结 前言 在可视化图形中为了方便区分,需要给图形一个标题.可以在画布外面用html调整位置之后作为图形的标题,当然也可以在画布内部进行一个标题的绘制.在画布上的节点数据量比较大的时候,也需要用到缩略图对图形进行一个缩略显示并且拖动缩略图的框选来重点的画布中的部分数据. 标题的使用 还是以前面的数据为例,在原有数据的基础上给图形增加一个标题代码示例如下 //data nodes: [ { key: "1", c

  • 详解GoJs节点的选中高亮实现示例

    目录 前言 gojs节点选中高亮的使用 只选中节点内部分元素的选中样式 定制的选中样式 节点选中时候增加操作按钮 修改选中节点的内部样式 总结 前言 上文中我们说到了,节点之间的文字描述.在有些时候我们要看两个节点之间的关系,在数据量比较大的时候就需要给两个节点给一个选中的样式.在使用的过程中,gojs默认给了一个节点的选中样式,就是一个蓝色的边框. gojs节点选中高亮的使用 //data myDiagram: null, nodes:[ { key: "1", color: &qu

  • GoJs连线上的信息展示使用详解

    目录 前言 连线上的信息怎么使用 连线上的文字信息的默认显示 对连线显示的信息增加其他绘图模板 修改文字和连线方向平行 两个节点之间有多个关系 总结 前言 在可视化图像中.节点是信息写的单元,而连线就是这些这些信息单元的联系.在有些情况下,不止需要知道两个节点之间有关系并且还需要知道两个节点之间的关系进行一个描述.这个时候就需要在连线上展示一些信息. 连线上的信息怎么使用 连线上的文字信息的默认显示 在之前的go.Link一文中提到过,是通过linkTemplate连线进行配置.下面对连线上的配

  • 一文详解JS中的事件循环机制

    目录 前言 1.JavaScript是单线程的 2.同步和异步 3.事件循环 前言 我们知道JavaScript 是单线程的编程语言,只能同一时间内做一件事,按顺序来处理事件,但是在遇到异步事件的时候,js线程并没有阻塞,还会继续执行,这又是为什么呢?本文来总结一下js 的事件循环机制. 1.JavaScript是单线程的 JavaScript 是一种单线程的编程语言,只有一个调用栈,决定了它在同一时间只能做一件事.在代码执行的时候,通过将不同函数的执行上下文压入执行栈中来保证代码的有序执行.在

  • 一文详解Java中的类加载机制

    目录 一.前言 二.类加载的时机 2.1 类加载过程 2.2 什么时候类初始化 2.3 被动引用不会初始化 三.类加载的过程 3.1 加载 3.2 验证 3.3 准备 3.4 解析 3.5 初始化 四.父类和子类初始化过程中的执行顺序 五.类加载器 5.1 类与类加载器 5.2 双亲委派模型 5.3 破坏双亲委派模型 六.Java模块化系统 一.前言 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最 终形成可以被虚拟机直接使用的Java类型,这个过程

  • 一文详解C++中运算符的使用

    目录 一.算术运算符 二.关系运算符 三.逻辑运算符 四.位运算符 五.赋值运算符 六.杂项运算符 一.算术运算符 运算符 描述 + 把两个操作数相加 - 从第一个操作数中减去第二个操作数 * 把两个操作数相乘 / 分子除以分母 % 取模运算符,整除后的余数 ++ 自增运算符,整数值增加 1 – 自减运算符,整数值减少 1 通过下面的例子可以让我们更好的理解C++中的运算符的意义与使用方法. #include <iostream> using namespace std; int main()

  • 一文详解Python中生成器的原理与使用

    目录 什么是生成器 迭代器和生成器的区别 创建方式 生成器表达式 基本语法 生成器函数 yield关键字 yield和return yield的使用方法 生成器函数的基本使用 send的使用 可迭代对象的优化 总结 我们学习完推导式之后发现,推导式就是在容器中使用一个for循环而已,为什么没有元组推导式? 原因就是“元组推导式”的名字不是这样的,而是叫做生成器表达式. 什么是生成器 生成器表达式本质上就是一个迭代器,是定义迭代器的一种方式,是允许自定义逻辑的迭代器.生成器使用generator表

  • 一文详解Java中Stream流的使用

    目录 简介 操作1:创建流 操作2:中间操作 筛选(过滤).去重 映射 排序 消费 操作3:终止操作 匹配.最值.个数 收集 规约 简介 说明 本文用实例介绍stream的使用. JDK8新增了Stream(流操作) 处理集合的数据,可执行查找.过滤和映射数据等操作. 使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询.可以使用 Stream API 来并行执行操作. 简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式. 特点 不是数据结构

  • 一文详解Python中PO模式的设计与实现

    目录 什么是PO模式 PO 三层模式 PO 设计模式的优点 将改写的脚本转为PO设计模式 构建基础的 BasePage 层 构建首页的 Page 层(HomePage) 构建登录页的 Page 层(LoginPage) 构建 首页 - 订单 - 支付 流程的 Page 层(OrderPage) PO 设计模式下测试Case的改造 在使用 Python 进行编码的时候,会使用自身自带的编码设计格式,比如说最常见的单例模式,稍微抽象一些的抽象工厂模式等等… 在利用 Python 做自动化测试的时候,

  • 一文详解C#中方法重载的底层玩法

    目录 一:为什么 C 不支持 二:C++ 符号表突破 三:C#如何实现突破 最近在看 C++ 的方法重载,我就在想 C# 中的重载底层是怎么玩的,很多朋友应该知道 C 是不支持重载的,比如下面的代码就会报错. #include <stdio.h> int say() { return 1; } int say(int i) { return i; } int main() { say(10); return 0; } 从错误信息看,它说 say 方法已经存在了,尴尬... 一:为什么 C 不支

  • 一文详解JavaScript中prototype的使用

    目录 prototype初步认识 函数有prototype属性,函数创建的对象没有 获得当前对象的属性 父和子的扩展 子的proto和prototype的区别 扩展得到的东西到底从哪来的 prototype初步认识 在学习JavaScript中,遇到了prototype,经过一番了解,知道它是可以进行动态扩展的 function Func(){}; var func1 = new Func; console.log(func1.var1) //undefined Func.prototype.v

  • 一文详解Python中的重试机制

    目录 介绍 1. 最基本的重试 2. 设置停止基本条件 3. 设置何时进行重试 4. 重试后错误重新抛出 5. 设置回调函数 介绍 为了避免由于一些网络或等其他不可控因素,而引起的功能性问题.比如在发送请求时,会因为网络不稳定,往往会有请求超时的问题. 这种情况下,我们通常会在代码中加入重试的代码.重试的代码本身不难实现,但如何写得优雅.易用,是我们要考虑的问题. 这里要给大家介绍的是一个第三方库 - Tenacity (标题中的重试机制并并不准确,它不是 Python 的内置模块,因此并不能称

  • 一文详解Python中复合语句的用法

    目录 Python复合语句 1.if 语句 2.while 语句 3.for 语句 4.try 语句 5.with 语句 6.match 语句 Python复合语句 复合语句是包含其它语句(语句组)的语句:它们会以某种方式影响或控制所包含其它语句的执行.通常,复合语句会跨越多行,虽然在某些简单形式下整个复合语句也可能包含于一行之内. if.while和for语句用来实现传统的控制流程构造.try语句为一组语句指定异常处理和/和清理代码,而with语句允许在一个代码块周围执行初始化和终结化代码.函

随机推荐