问题背景是,在进行机器性能可视化的前端开发时,使用折叠面板将不同机器的性能图表画到不同的折叠面板上去。而机器的选择利用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. (数据科学学习手札104)Python+Dash快速web应用开发——回调交互篇(上)

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  2. 20V,24V转5V,20V,24V转3.3V降压芯片,IC介绍

    常用的20V和24V转5V,3.3V的LDO稳压和DC-DC降压芯片: PW6206系列是一款高精度,高输入电压,低静态电流,高速,低压降线性稳压器具有高纹波抑制.输入电压高达40V,负载电流高达10 ...

  3. (05)-Python3之--运算符操作

    1.算数运算 num_a = 100 num_b = 5000 # 加法 + print(num_a + num_b) # 减法 - print(num_a - num_b) # 乘法 * print ...

  4. SpringMVC Tomcat 启动时报错:java.lang.IllegalStateException: Error starting child

    大概原因如下: 1.Controller里RequestMapping("/test")前面没有"/"; 2.jar包冲突,比如我的将数据库连接版本由5.1.6 ...

  5. linux/git常用命令收集中

    1.进入文件夹 cd 文件名     进入某个文件 cd ..  返回上一级目录 cd /    进入根目录 cd ~ 切换到当前 cd -   切换到上一个目录 2.查看 pwd 文件名   查看路 ...

  6. 【Source Insight】查找功能 Lookup References 详解

    1.Options Case Sensitive //区分大小写 Whole Words Only //全字匹配查找 Skip Inactive Code //跳过无效代码查找 Skip Commen ...

  7. 理解和运用 ClassLoader 该篇文章就够了

    定义 根据<深入理解Java虚拟机>提到"通过一个类的全限定名(packageName.ClassName)来获取描述此类的二进制字节(class文件字节)这个动作的代码模块就叫 ...

  8. Map转换为格式化的YAML字符串

    yaml与java对象的互转 yaml与java对象的互转有snakeyaml <dependency> <groupId>org.yaml</groupId> & ...

  9. SpringMVC听课笔记(二:SpringMVC的 HelloWorld)

    1.如何建Maven web项目,请看http://how2j.cn/k/maven/maven-eclipse-web-project/1334.html 2.Maven项目,pom文件中的jar包 ...

  10. PyQt中ui编译成窗体.py,中文乱码

    我在Eric工具下编译的 解决办法: 1.打开 C:\Python27\Lib\site-packages\eric4\i18n,将中文资源包的名称"GB2312."去掉,变成er ...