工作笔记一——杂项

近期做的项目中遇到一些棘手的问题,解决的过程用到很多知识,在此记下主要的问题与解决方法。

页面功能介绍:获取五张表格的大量数据(大概有几千条记录),然后到前台显示在table里面,实现行列汇总。页面保存也是要保存这些数据的(几千条)。大概有三个如下的表格保存着大量数据:


1.页面大量计算的解决方案

如果原来页面有默认值,要显示默认值,并且要显示行列汇总。数据少的时候,在前台直接使用jQuery的trigger触发计算是完全可行的,但是数据量稍微多一点,页面就会卡死甚至浏览器会崩溃。所以我采用的解决方案是在前台计算行列的汇总值展示,不用trigger的方式。这里我采用了webworker。

使用方法如下:

            var worker = new Worker("${base.contextPath}/resources/js/cal_job.js");//给异步计算传递参数worker.postMessage(info);//接收到计算后的值的回调worker.onmessage = function (evt) {//evt.data就是worker计算后的返回数据vm.sumData = evt.data;}

在计算的cal_job.js里面:

onmessage = function (evt) {//前面传过来的参数(info)var calcData = evt.data;//自己的计算//......//将计算结果的数据发送回主线程postMessage({name:'value'});
}

这样在主页面拿到计算后的行列汇总值,直接$(element).text(‘xxx’)就可以了。

2.同时调用几个保存接口,都是异步的,如何保证全部保存完后再执行相应的方法

页面涉及到五张表的数据保存,为了提高效率,将这五个实体的保存分别放到各自对应的controller中,然后异步保存。保存之前会有一个layer的loading图表,保存结束后这个图标要消失。这就要涉及捕获全部保存后的时刻了。有一个简单的方法,是采用计数的方式,即先定义一个标记变量=0,在每一个保存成功的回调里面给这个变量+1,然后判断这个变量的值,如果等于5的话就关闭loading的图标。我没采用这种方法,因为比较笨拙。我选择的是Promise对象的all方法。由于Promise在IE上兼容有些问题,可以参考下面第四条。

                        layer.msg('数据保存中...', {icon: 16, time: 0});var promises = [this.saveRe(), this.savePat(), this.saveTrn(), this.saveFB(), this.saveOutsource()];/***把所有的异步请求封装成一个promise对象,针对这个promise进行监听回调,可以保证在保存完成后跳转页面***/Promise.all(promises).then(function (data) {layer.closeAll();}).catch(function () {layer.alert('保存出错');})

3.jQuery事件触发完成后执行某个方法

如果要在trigger('change')之后执行某一方法,要使用Deferred对象来完成。比如我在整个表格都触发了change事件之后,再反转某个标志位,就可以就可以这样做:

                    vm.isInit = true;var df = $.Deferred();//获取要进行change的行var $rows = $('#pat-scroll-tr-0').find('input');//定义一个方法任务var serviceTask = function (dtd) {//在这里触发change事件$rows.trigger('change');dtd.resolve();return dtd.promise();};//在trigger完成后再执行的操作$.when(serviceTask(df)).done(function () {vm.isInit = false;});

4.Promise对象在页面无法使用

Promise对象在IE上不兼容,可以使用polyfill进行转换,简单的解决方法就是在页面上引入cdn的polyfill.js就可以了:

<script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script>

5.layer控件的弹窗显示小bug

layer控件在火狐上显示的小问题:

在页面上加入以下样式调整即可:

/**解决火狐下的tip显示的bug*/.custom-padding > .layui-layer-content {padding: 0px;padding-left: 20px;}
现在就可以正常渲染了:




转载于:https://www.cnblogs.com/jerryyj/p/9621563.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Coolite 中GridView行按钮取行ID并调用服务器端代码

效果图&#xff1a; 关系代码&#xff1a; <Command Handler"if(commandbutSelectReocrd){strrecord.data.SessionId; #{AjaxMethods}.SelectRecord(str);}" /> 全部html代码&#xff1a; 代码 <ext:GridPanel ID"GridPanel1"Height"325&quo…

Flink的三种执行模式STREAMING和BATCH和AUTOMATIC

执行模式 执行模式三种 BATCH模式的两种配置方法 什么时候选择BATCH模式

activemq生产者和消费者的双向通信

http://websystique.com/spring/spring-4-jms-activemq-example-with-jmslistener-enablejms/转载于:https://www.cnblogs.com/zhangshitong/p/7906468.html

大学生必犯的N大错误(1)

1&#xff09;不会英语&#xff1a; 计算机科学源于美国&#xff0c;重量级的文档都是英文的。不会英语的你只能忍受拙劣的翻译和很大延迟的文档和图书&#xff08;翻译出来的优秀的文档和图书几乎都是很久以前的出版物&#xff09;。 语言的重要性&#xff0c;实际上体现的是沟…

RabbitMQ基础概念详细介绍

转至&#xff1a;http://www.ostest.cn/archives/497 引言 你是否遇到过两个&#xff08;多个&#xff09;系统间需要通过定时任务来同步某些数据&#xff1f;你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎&#xff1f;如果是&#xff0c;那么恭喜你&#x…

ubuntu 目录及文件权限 000 444 666 777(转)

转载自&#xff1a;http://hi.baidu.com/im886/blog/item/434764d9f6c210f838012f0b.html 1 [001] 执行权限 x2 [010] 只写权限 w4 [100] 只读权限 r sudo chmod 600 &#xff08;只有所有者有读和写的权限&#xff09; sudo chmod 644 &#xff08;所有者有读和写的权限&am…

信号与系统(中)

第四章 线性时不变系统的时域分析 4.1连续时间系统的时域分析 微分方程的求解 齐次解特解完全解起始状态到初始状态的转换 冲激平衡法连续时间系统的零输入响应与零状态响应 双零法4.2离散时间系统的时域分析 迭代法时域经典法双零法差分方程的求解 齐次解特解完全解离散时间系…

对自学还是培训的看法

在论坛上看到的帖子&#xff0c;转过来&#xff0c;标题是 “对自学还是培训的看法” http://bbs.51cto.com/thread-605267-1.html 转载于:https://blog.51cto.com/gooltsing/467392

RocketMq中的perm属性2 4 6用于设置对当前创建Topic的操作权

RocketMq中的perm属性用于设置对当前创建Topic的操作权限 2表示&#xff1a;只可以写 4表示&#xff1a;只可以读 6表示&#xff1a;可以进行读写

时刻修正自已的思想

时刻修正自已的思想 人与人的区别&#xff0c;归根结底是人的思想的区别&#xff0c;以前也经常看一些名言警句&#xff0c;但那都是别人的&#xff0c;只能参考&#xff0c;自已很难转化为自已的&#xff0c;所以要从实践中学习&#xff0c;以下是我自已的所思所想&#xff0c…

css新奇技术及其未来发展

1.图像替换技术&#xff1a; 图像替换技术是指使用图像替换页面中文本的功能&#xff0c;类似与在页面中插入图像&#xff0c;只是这种方法更为方便&#xff0c;易于代码管理。通常来说&#xff0c;设计者习惯使用有意义的图像去替换一些标题&#xff0c;logo和某些特定的页面背…

八皇后问题求解动态图形演示

这是我以前用Delphi写的一个教学软件。内容是关于“八皇后”问题的求解动态图形演示。这个软件采用多线程设计&#xff0c;包含了递归回溯与非递归回溯两种算法&#xff0c;还可随时调整演示速度&#xff0c;界面共有五种前景和五种背景图形。包含所有源程序和资源文件。 以…

PHP程序性能优化的50种方法

用单引号代替双引号来包含字符串&#xff0c;这样做会更快一些。因为 PHP 会在双引号包围的 字符串中搜寻变量&#xff0c;单引号则不会&#xff0c;注意&#xff1a;只有 echo 能这么做&#xff0c;它是一种可以把多个字符 串当作参数的“函数”(译注&#xff1a;PHP 手册中说…

JDK JRE 的作用与区别【转】

对于java初学者来说&#xff0c;往往不懂区分jdk和jre的区别&#xff0c;实际上这两个东西差别很大的&#xff0c;有必要了解一下&#xff1a; 简单的说JDK是面向开发人员使用的SDK&#xff0c;它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发…

Java的JDBC事务详解

事务的特性&#xff1a;1) 原子性&#xff08;atomicity&#xff09;&#xff1a;事务是数据库的逻辑工作单位&#xff0c;而且是必须是原子工作单位&#xff0c;对于其数据修改&#xff0c;要么全部执行&#xff0c;要么全部不执行。2) 一致性&#xff08;consistency&#xf…

HashMap中最多只允许一条记录的键为Null,允许多条记录的值为Null

Map主要用于存储健值对&#xff0c;根据键得到值&#xff0c;因此不允许键重复(重复会覆盖)&#xff0c;但允许值重复。 Hashmap是一个最常用的Map&#xff0c;它根据键的HashCode值存储数据&#xff0c;根据键可以直接获取它的值&#xff0c;具有很快的访问速度。遍历时&#…

nfs文件系統

nfs 配置&#xff1a;使用NFS系统服务&#xff0c;至少需要启动以下3个系统守护进程。 1.rpc.nfsd 2.rpc.mountd 3.portmap NFS系统服务器端文件系统的共享设置有三种方法1.直接修改/etc/exports文件2.用exports命令来增加和删除目录3.使用图形化的配置方法 NFS系统服务客户端配…