问题背景是,在进行机器性能可视化的前端开发时,使用折叠面板将不同机器的性能图表画到不同的折叠面板上去。而机器的选择利用select下拉选项来筛选。

由于在折叠面板中,通过 如下v-model双向绑定了currentPanel变量,用于记录当前哪些面板是展开的。

v-model = "currentPanel"

并且在每个面板上将name绑定为选中的机器列表的index:

 <Panel class="panel"  v-for="(item,index) in chartList" :key="index" :name='`${index}`'>

而由于用户选中的机器列表是会变化的,导致无法将index固定映射到某一个机器(以IP地址作为唯一标示)上。

为解决这个问题,我的第一想法是将name不再绑定到index上而是直接绑定到nodeIp上。如下所示:

<Panel class="panel"  v-for="(item,index) in chartList" :key="index" :name=“item.graphInfo.nodeIp”}`'>   

这样以来,理论上讲就是将currentPanel双向绑定一个由nodeIp标识的列表,从而实现展开状态与机器的一一对应,而不再需要通过index这一相对位置来记录。

然而,现实很骨感,当实现这一思路并运行时出现了模版渲染在charList数据为空时控制台爆红的情况。尽管不影响正常使用,但作为宇宙条的一名小小实习生,还是无法忍受爆红的事实。

经mentor点拨最后选择引入一个单独的数据结构,专门用来存储机器列表的面板折叠状态:

[{nodeIp:'101.101.101', isOpen:true},{nodeIp:'102.102.102', isOpen:false}, ... ... ]

对于这个数组,简单解释一下:该数组只存储用户在select下拉框中选择的机器,而isOpen则记录改机器面板是否打开。

至此,对于面板的显示只需维护这个数据结构即可:

1)当用户选择或删除某个机器时,更新该数组,默认新增的机器isOpen = true;

2)当数组更新完成后,根据该数组去设置currentPanel中有哪些值,(凡是isOpen===true的机器,就把他在该数组中的下标push进currentPanel中)

【以上两步可称为是根据数组更新currentPanel】

3)当用户折叠或展开某个面板时,currentPanel数组会和原始方法一样增加或减少一个下标;这时就需要根据用户操作后的currentPanel去更新含isOpen的状态数组。

【这一步可以称为是记录当前用户的折叠展开行为并记录到新增的那个数据结构中。

   

利用设置新数据存储结构解决vue中折叠面板双向绑定index引起的问题的更多相关文章

  1. kafka 数据存储结构+原理+基本操作命令

    数据存储结构: Kafka中的Message是以topic为基本单位组织的,不同的topic之间是相互独立的.每个topic又可以分成几个不同的partition(每个topic有几个partitio ...

  2. Berkeley DB的数据存储结构——哈希表(Hash Table)、B树(BTree)、队列(Queue)、记录号(Recno)

    Berkeley DB的数据存储结构 BDB支持四种数据存储结构及相应算法,官方称为访问方法(Access Method),分别是哈希表(Hash Table).B树(BTree).队列(Queue) ...

  3. Android开发之利用SQLite进行数据存储

    Android开发之利用SQLite进行数据存储 Android开发之利用SQLite进行数据存储 SQLite数据库简单介绍 Android中怎样使用SQLite 1 创建SQLiteOpenHel ...

  4. Cassandra 的数据存储结构——本质是SortedMap<RowKey, SortedMap<ColumnKey, ColumnValue>>

    Cassandra 的数据存储结构 Cassandra 的数据模型是基于列族(Column Family)的四维或五维模型.它借鉴了 Amazon 的 Dynamo 和 Google's BigTab ...

  5. 利用POI工具读取word文档并将数据存储到sqlserver数据库中

    今天实现了利用POI工具读取word文档,并将数据存储到sql数据库中,代码如下: package word; import java.io.File; import java.io.FileInpu ...

  6. 修改vue中的挂载页面(index.html)的路径

    修改vue中的挂载页面(index.html)的路径 2019年03月30日 12:07:12 VegasLemon 阅读数 501    版权声明:本文为博主原创文章,未经博主允许不得转载. htt ...

  7. 利用Gson和SharePreference存储结构化数据

    问题的导入 Android互联网产品通常会有很多的结构化数据需要保存,比如对于登录这个流程,通常会保存诸如username.profile_pic.access_token等等之类的数据,这些数据可以 ...

  8. Hashtable数据存储结构-遍历规则,Hash类型的复杂度为啥都是O(1)-源码分析

    Hashtable 是一个很常见的数据结构类型,前段时间阿里的面试官说只要搞懂了HashTable,hashMap,HashSet,treeMap,treeSet这几个数据结构,阿里的数据结构面试没问 ...

  9. Redis之数据存储结构

    今天去中关村软件园面试,被问到:你做项目用到的Redis处理数据用的什么结构?顿时石化,”用到的结构,不就是key-value嘛,还有什么结构?“.面试官说:“平时除了工作,要加强学习,下面的面试我觉 ...

随机推荐

  1. Hadoop2.7.7阿里云安装部署

    阿里云的网络环境不需要我们配置,如果是在自己电脑上的虚拟机,虚拟机的安装步骤可以百度.这里是单机版的安装(也有集群模式的介绍)使用Xshell连接阿里云主机,用命令将自己下载好的安装包上传到服务器 # ...

  2. 说说C# 8.0 新增功能Index和Range的^0是什么?

    前言 在<C# 8.0 中使用 Index 和 Range>这篇中有人提出^0是什么意思?处于好奇就去试了,结果抛出异常.查看官方文档说^0索引与 sequence[sequence.Le ...

  3. Feign配置日志的打印级别

    一.细粒度的配置Feign的日志级别(针对每个微服务配置) 1.java代码方式 (1)在Feign接口注解上面配置configuration /** * @author : maybesuch * ...

  4. 成为一名优秀的Java程序员9+难以置信的公式

    成为一名优秀的Java程序员 成为一名优秀的Java程序员并不重要,但是首先您应该了解基本的编程语言. 好吧,你知道那太好了.我们应该一步一步地精通Java编程,并应遵循所有说明,改进Java的编程逻 ...

  5. 「THP3考前信心赛」解题报告

    目录 写在前面&总结: T1 T2 T3 T4 写在前面&总结: \(LuckyBlock\) 良心出题人!暴力分给了 \(120pts\) \(T1\) 貌似是个结论题,最后知道怎么 ...

  6. luoguP6754 [BalticOI 2013 Day1] Palindrome-Free Numbers

    目录 luoguP6754 [BalticOI 2013 Day1] Palindrome-Free Numbers 简述题意: Solution: Code luoguP6754 [BalticOI ...

  7. hadoop使用常见问题总结!

    1,执行 hdfs dfs -copyFromLocal 命令报错! 19/01/02 11:01:32 INFO hdfs.DFSClient: Exception in createBlockOu ...

  8. 子网划分、变长子网掩码和TCP/IP排错__散知识点

    1.IP零子网(ip subnet-zero):这个命令可以允许你在自己的网络设计中使用第一个和最后一个子网.例如,C类掩码192通常只可以提供子网64和128,但在使用了ip subnet-zero ...

  9. 网际互连__TCP/IP三次握手和四次挥手

    在TCP/IP协议中,TCP协议提供可靠的连接服务. 位码即tcp标志位,有6种标示: SYN(synchronous建立联机).ACK(acknowledgement 确认).PSH(push传送) ...

  10. Effective Java读书笔记--创建和销毁对象

    1.优先考虑用静态工厂方法代替构造器2.遇到多个构造器参数时要考虑使用构建器Builder解决参数过多,不可变类型.私有构造方法,静态类的构造方法提供必要参数,剩下可选.new xxx.build() ...