热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

datagrid直接编辑保存的“设计缺陷”之二

datagrid直接编辑保存的“设计缺陷”之二

datagrid直接编辑保存的“设计缺陷”只是解决了如何让后台能接收到前台的数据

但是,如何处理前台数据短暂的保存,对我来说还是有点疑惑~

所以本篇文章是接上篇文章的后续处理~重点并不是在讨论“设计缺陷”了~


因为貌似js中没有集合类型,所以这里用js中的array来保存数据。

那么这里有几个问题:

1、每次编辑完成(endEdit)的时候将编辑行保存,这里完成编辑包括三种情况(保存、新增和点击另一行)

值得注意的是,这里点击datagrid之外的input或者其他元素不会使datagrid正在编辑的行失去焦点~

2、删除的时候要能够对应删除array中的元素(用什么来关联?)

最初的想法是:若本来就存在的记录有主键id来标识,这样删除行的时候就可以关联删除array中的数据了,但是若是新建的呢?还未被分配id该怎么办呢?

遂否定了这个想法。

第二个想法:在页面上人为给它们分配唯一的标识符,这个想法应该是可行的,但是略显麻烦

有没有更简单的方法呢?忽然想到列表中的数据和array中的数据其实是一一对应的

列表中的数据完全就是array中数据结构的可视化展示嘛!其顺序也是完全一致的,那么其实用下标就可以将两者关联起来了!


根据官网上的demo,提供了endEdit这个方法,用于完成编辑时调用,并且在其中做了校验,下面这个是我的改写

其中,翻译并未用官网的做法,而是用了velocity的Directive来实现的:这样实现的好处是:

不仅可以翻译,且将翻译用的json缓存在页面上,这样都是local数据,combobox可以直接使用这个json,无需remote

    // 1、验证行校验是否通过,若通过则停止编辑并将editIndex置为undefined
    function endEditing(){
        if (editIndex == undefined){return true}
        if ($('#dispatches_details').datagrid('validateRow', editIndex)){	// 验证通过
        	// 如下的方法是官网上用来实现翻译的,算是一个小trick吧  
            // var ed = $('#dispatches_details').datagrid('getEditor', {index:editIndex,field:'reason'});
            // var reason = $(ed.target).combobox('getText');
            // $('#dispatches_details').datagrid('getRows')[editIndex]['reasonDes'] = reason;
            
            // endEdit的解释如下:finishing editing but before destroying editors
            // 也就是说完成编辑,但是还并未释放编辑器,也就是说rows里如combobox之类的值还是value,而不是text
            $('#dispatches_details').datagrid('endEdit', editIndex);
            // 每次endEditing都需要保存
	        var row = $('#dispatches_details').datagrid('getRows')[editIndex];
	        if(row){	// 防止不编辑,直接accept(),可能为null
				// 直接把json传到后台,发个毛form
        		jsonArr.splice(editIndex, 1, $.toStr(row));
	        }
        	
            editIndex = undefined;
            return true;
        } else {
            return false;
        }
    }


这里用到了js中操作array的一个方法——splice,下面是从w3school引用的方法说明,注意,这个方法会改变原始数组,不同于slice

语法

arrayObject.splice(index,howmany,item1,.....,itemX)
参数 描述
index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, ..., itemX 可选。向数组添加的新项目。

返回值

类型 描述
Array 包含被删除项目的新数组,如果有的话。

jsonArr.splice(editIndex, 1, $.toStr(row)); 这样一句话也就实现了替换array元素的功能!




推荐阅读
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 如何使用PyCharm及常用配置详解
    对于一枚pycharm工具的使用新手,正确了解这门工具的配置及其使用,在使用过程中遇到的很多问题也可以迎刃而解,文中有非常详细的介绍, ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 如何在CAD查看器中同时打开并对比两张DWG图纸
    本文将详细介绍如何使用专业的CAD查看软件,如迅捷CAD看图,来同时打开和对比两张DWG格式的CAD图纸。无论是在设计审核还是项目管理中,掌握这一技能都能显著提高工作效率。 ... [详细]
  • 编写了几个500行左右代码的程序,但基本上解决问题还是面向过程的思维,如何从问题中抽象出类,形成类的划分和设计,从而用面向对象的思维解决问题?有这方面的入门好书吗?最好是结合几个具体的案例分析的 ... [详细]
  • Qt QTableView 内嵌控件的实现方法
    本文详细介绍了在 Qt QTableView 中嵌入控件的多种方法,包括使用 QItemDelegate、setIndexWidget 和 setIndexWidget 结合布局管理器。每种方法都有其适用场景和优缺点。 ... [详细]
  • Ulysses Mac v29:革新文本编辑与写作体验
    探索Ulysses Mac v29,这款先进的纯文本编辑器为Mac用户带来了全新的写作和编辑环境。它不仅具备简洁直观的界面,还融合了Markdown等标记语言的最佳特性,支持多种格式导出,并提供强大的组织和同步功能。 ... [详细]
  • 本文详细介绍了Vim编辑器的三种主要模式及其常用命令,帮助用户更好地掌握这一强大的文本编辑工具。 ... [详细]
  • 解决Windows 10开机频繁自检问题的实用方法
    许多用户在使用Windows 10系统时,经常会遇到开机时自动进行磁盘检查的情况。这不仅影响了开机速度,还可能带来不必要的麻烦。本文将详细介绍如何通过简单的注册表修改来避免每次开机时的磁盘自检,提升系统启动效率。 ... [详细]
  • 本文详细介绍了流编辑器sed中的G、H、g、h命令,探讨了它们的工作原理及应用场景。通过实例解析和图解分析,帮助读者掌握这些高级命令的使用方法。 ... [详细]
  • HTML基础入门指南
    本文将深入浅出地介绍HTML的基础知识,包括其定义、开发工具、制定机构、特性、基本标签及更多实用内容。 ... [详细]
  • 本文介绍了解决Oracle 10G数据库中ORA-12541 TNS: no listener错误的详细步骤。该错误通常发生在监听器服务未正确启动或配置不当的情况下,文章将指导您通过检查服务状态、配置注册表和启动监听器来解决问题。 ... [详细]
  • 在安装 SQL Server 时,选择混合验证模式可以提供更高的灵活性和管理便利性。如果您已经安装了 SQL Server 并使用单一的 Windows 身份验证模式,可以通过以下步骤将其更改为混合验证模式。 ... [详细]
  • 本文介绍了在 SQL Server 2012 客户端中格式化 SQL 查询语句的多种方法,包括内置功能和第三方工具,帮助用户提高代码可读性和维护性。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
author-avatar
dmcm0005
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有