摘要 : 前几个月,客户要求显示列表做到列锁定+表头锁定+列组合,但从Extjs到Jquery EasyUi,从Jquery Grid到Telerik等等组件,发现无一符合条件,要么只有列锁定,要么只有列组合,当两者结合就不行了。于是只好开始自己琢 ...
前几个月,客户要求显示列表做到列锁定+表头锁定+列组合 , 但从Extjs到Jquery EasyUi,从Jquery Grid到Telerik等等组件,发现无一符合条件,要么只有列锁定,要么只有列组合,当两者结合就不行了。于是只好开始自己琢磨了,然后就有了jqGridView。
设计思路
在开始之前,总得理下思路。我CSS不行,JS一般,但是我有思路,先看看下面两个图:
z
从上图中可以看出,毫无疑问的,我们需要将一个列表切成4块——锁定列表头、锁定列数据行、非锁定列表头、非锁定列数据行 。如图:
其中,锁定列表头、锁定列数据列、非锁定列表头均无滚动条,滚动条全在非锁定列数据列,但拖动右侧滚动条,需要联动锁定列数据行,但拖动底部滚动条,需联动非锁定列表头。
在我认为,磨刀不误砍柴工。好的想法、好的设计才能更大可能性的走向成功。
接下来,是细节的实现了:
选择什么编程语言呢?好像还没写过Jquery插件,那么就用这个来练练手吧。我对开发新东西或者实现自己的想法或者有兴趣却不熟悉的编码特别来劲。
选择什么方式呢?开始,毫无意外的想到使用Table来组合,于是坑次坑次的开始了。当编码完成后,发现一个棘手的问题——模块之间无法对齐。即使设置了每个单元格宽度以及表格宽度也不行,请了美工辅助也不行,于是放弃了。有意向的朋友可以试试。table不行,那就试试Div吧,人总不能在一条路上走死吧。于是又坑次坑次的开始了,终于修改N次后完成了。
样例
首先举几个例子来说明如何使用:
简单单行表头
< script type ="text/javascript"> $(function () { $.jqGridView(' <% = gvData.ClientID %> ' , { lockColumns: 3, isRemoveGridView: true , rowStyle: 'gv-tr-rowStyle' , alternatingRowStyle: 'gv-tr-alternatingRowStyle' , hoverRowStyle: 'gv-tr-hoverRowStyle' }); }); script >
合并列
< script type ="text/javascript"> $(function () { $.jqGridView(' <% = gvData.ClientID %> ' , { lockColumns: 3, isRemoveGridView: true , rowStyle: 'gv-tr-rowStyle' , alternatingRowStyle: 'gv-tr-alternatingRowStyle' , hoverRowStyle: 'gv-tr-hoverRowStyle' , leftGroupCols: '单位 ' , rightGroupCols: '待定 1级 2级 3级 4级 5级 6级 7级 8级 9级 10级 11级 12级 13级 14级 15级 16级 ' }); }); script >
行点击事件
< script type ="text/javascript"> $(function () { $.jqGridView(' <% = gvData.ClientID %> ' , { lockColumns: 3, isRemoveGridView: true , rowStyle: 'gv-tr-rowStyle' , alternatingRowStyle: 'gv-tr-alternatingRowStyle' , hoverRowStyle: 'gv-tr-hoverRowStyle' , leftGroupCols: '单位 ' , rightGroupCols: '待定 1级 2级 3级 4级 5级 6级 7级 8级 9级 10级 11级 12级 13级 14级 15级 16级 ' , rowClick: function (e) { var tds = e.data.tds; var rowIndex = e.data.rIndex; var isLeft = e.data.isLeft; alert("列1行" + rowIndex + "的值为:" + tds.eq(0).text() + ",您点击的是" + (isLeft ? "锁定列" : "非锁定列" )); } }); }); script >
样式
既然决定使用div,那么样式少不了。我倾向于外观方面的控制全放在样式里面,于是定义了以下样式:
/*jqGridView Style */ .gv-dataContent{ width: 750px; height: 320px; margin: 5px auto; text-align:left;}.gv-dataContent th, tr{ white-space: nowrap;}.gv-dataContent td, th{ padding: 0 0 0 0; margin: 0 0 0 0; white-space: nowrap;}.gv-header-left{ width: auto; overflow: hidden; float : left; border-left: 1px solid #539ebb; border-collapse: collapse;}.gv-header-right{ overflow: hidden; border-collapse: collapse;}.gv-data-left{ width: auto; overflow: hidden; float : left; border-left: 1px solid #539ebb; border-bottom: 1px solid #539ebb; border-collapse: collapse;}.gv-data-right{ overflow: scroll; border-collapse: collapse;}.gv-div-table{ border-collapse: collapse; width: auto;}.gv-div-tr{ clear: both; height: 30px; overflow: hidden;}.gv-div-th, .gv-div-td{ height: 30px; float : left; border: 1px solid white; margin: 0px 0 0 -1px; text-align: center; vertical-align: middle; line-height: 30px; border-collapse: collapse; float : left; color: #3274a4;}.gv-div-th{ background-color: #86A9D2; font-weight: bold; border: 1px solid white;}.gv-tr-rowStyle{ background-color: #8ecbe3;}.gv-tr-alternatingRowStyle{ background-color: #d3ebf4;}.gv-tr-hoverRowStyle{ background-color: #6786d6; cursor:pointer;}/*GridView 样式*/ .HeaderStyle{ background-color:#86A9D2; font-weight:bold; height:26px; white-space: nowrap; text-align:center; border: 1px solid white; color: #3274a4;}.RowStyle{ background-color: #8ecbe3; height:26px; text-align:center; white-space: nowrap; border: 1px solid white; color: #3274a4;}.AlternatingRowStyle{ background-color: #d3ebf4; height:26px; white-space: nowrap; border: 1px solid white; color: #3274a4; text-align: center;}.datacontent{ font-size:12px; font-family:微软雅黑; width:740px; border:1px solid #7C9BBF; margin:0 auto; clear: both; text-align: center; *text-align: center; margin-left: 5px; padding:5px; width:760px; overflow:auto; }
从样式中可以看出大体的规则,也是仿照table元素来的。table、tr、th、td等等。其中有几个重要样式要注意了:
.gv-dataContent 整个jqGridView的整体样式
.gv-header-left 左侧表头区域
.gv-header-right 右侧表头区域
.gv-data-left 左侧数据区域
.gv-data-right 右侧数据区域
.gv-div-table 表示一个表格,每个区域均存在
.gv-div-tr 表示行样式
.gv-div-th 表示表头单元格样式
.gv-div-td 表示单元格样式
.gv-tr-rowStyle 表示奇数行样式
.gv-tr-alternatingRowStyle 表示偶数行样式
.gv-tr-hoverRowStyle 表示悬浮行样式
编码 先贴上代码: 1: /** 2: * 本插件用于实现GridView的列锁定和表头锁定,以及表头组合 3: * @example $.jqGridView('<%=gvData.ClientID %>', { lockColumns: 3 }); 4: * @param String gridViewClientID GridView的客户端ID 5: * @option Number lockColumns 锁定的列数。如果包含合并表头,请与合并表头的列数一致。 6: * @option String leftGroupCols 左侧合并列的HTML,不设置则默认为单行表头。 7: * @option String rightGroupCols 右侧合并列的HTML,不设置则默认为单行表头。 8: * @option String removeLeftHeaderStrBySplit 根据分隔符移除左侧头部字符。 9: * @option String removeRightHeaderStrBySplit 根据分隔符移除右侧头部字符。 10: * @option String rowStyle 偶数行样式。 11: * @option String alternatingRowStyle 奇数行样式。 12: * @option String hoverRowStyle 悬浮行样式。 13: * @option Bool isRemoveEmptyAndZeroCols 是否移除空列或者0列。 14: * @option Bool isHideGridView 是否在处理后隐藏GridView。 15: * @option Bool isRemoveGridView 是否在处理后移除GridView。 16: * @option String emptyMessage 没有数据时显示的内容,默认为“没有数据。”。 17: * @option event rowClick 行单击事件。 18: * @author 雪雁 19: * @email [email protected] 20: * @webSite http://www.cnblogs.com/codelove/ 21: */ 22: jQuery.jqGridView = function (gridViewClientID, options) { 23: if (gridViewClientID !== undefined && options !== undefined) { 24: function formatHeaderHtml(html) { 25: return html.replace(/\
/g, '') 26: .replace(/\/g, '') 27: .replace(/\ /g, ''); 28: } 29: //锁定的列数 30: var lockColumns = options.lockColumns === undefined ? 1 : options.lockColumns; 31: //左侧组合列HTML 32: var leftGroupCols = $(options.leftGroupCols === undefined ? '' : formatHeaderHtml(options.leftGroupCols)); 33: //右侧组合列HTML 34: var rightGroupCols = $(options.rightGroupCols === undefined ? '' : formatHeaderHtml(options.rightGroupCols)); 35: //根据分隔符移除左侧头部字符 36: var removeLeftHeaderStrBySplit = options.removeLeftHeaderStrBySplit === undefined ? '' : options.removeLeftHeaderStrBySplit; 37: var removeRightHeaderStrBySplit = options.removeRightHeaderStrBySplit === undefined ? '' : options.removeRightHeaderStrBySplit; 38: //偶数行样式 39: var rowStyle = options.rowStyle === undefined ? '' : options.rowStyle; 40: //奇数行样式 41: var alternatingRowStyle = options.alternatingRowStyle === undefined ? '' : options.alternatingRowStyle; 42: //鼠标悬浮行样式 43: var hoverRowStyle = options.hoverRowStyle === undefined ? '' : options.hoverRowStyle; 44: var isSafari = $.browser.safari; 45: //数据空显示内容 46: var emptyMessage = options.emptyMessage === undefined ? '没有数据。' : options.emptyMessage; 47: var gvData = http://www.cnblogs.com/codelove/archive/2012/07/29/$('#' + gridViewClientID); 48: if (!gvData || gvData.length == 0) { 49: console.error("GridView不存在,请检查!!!", gridViewClientID, options); 50: return; 51: } 52: //是否移除空列或者0列 53: if (options.isRemoveEmptyAndZeroCols !== undefined && options.isRemoveEmptyAndZeroCols) { 54: var arr_remove = new Array(gvData.find('tr:eq(0) th').length); 55: var rowsCount = gvData.find('tr:gt(0)').each(function (rIndex) { 56: var tr = $(this); 57: tr.find('td').each(function (cIndex) { 58: if (arr_remove[cIndex] === undefined || arr_remove[cIndex] == null) 59: arr_remove[cIndex] = 0; 60: var val = $(this).text().replace(/(^\s*)|(\s*$)/g, ""); 61: if (val == '' || val == 0) { 62: arr_remove[cIndex]++; 63: } 64: }); 65: }).length; 66: gvData.find('tr').each(function (rIndex) { 67: var tr = $(this); 68: tr.find('td,th').each(function (cIndex) { 69: if (arr_remove[cIndex] == rowsCount) 70: $(this).remove(); 71: }); 72: }); 73: } 74: var leftCols = lockColumns - 1; 75: var rightCols = lockColumns; 76: var isRemoveGridView = options.isRemoveGridView === undefined ? true : options.isRemoveGridView; 77: //所有列宽 78: var colsLengsArr = new Array(); 79: var colsCount = gvData.find('tr:eq(0) th').each(function (i) { 80: colsLengsArr[i] = ($(this).outerWidth() + 1); 81: }).length; 82: if (lockColumns >= colsCount) lockColumns = colsCount; 83: //左侧table宽度 84: var leftTableWidth = 1; 85: //右侧table宽度 86: var rightTableWidth = 1; 87: for (var i = 0; i < lockColumns; i++) { 88: leftTableWidth += (colsLengsArr[i] + 1); 89: if (isSafari) leftTableWidth += 0.3; 90: } 91: for (var i = lockColumns; i < colsLengsArr.length; i++) { 92: rightTableWidth += (colsLengsArr[i] + 1); 93: if (isSafari) rightTableWidth += 0.3; 94: } 95: 96: gvData.parent().prepend('
'); 97: var gv_dataContent = $('.gv-dataContent'); 98: if (gvData.find('tr').length <= 1) { 99: gv_dataContent.prepend('' + emptyMessage + '
'); 100: return; 101: } 102: //右侧区域宽度 103: var rightAreaWidth = gv_dataContent.width() - (leftTableWidth + 25); 104: //数据区域高度 105: var dataAreaHeight = gv_dataContent.height(); 106: 107: gv_dataContent.prepend('
'); 108: var gv_header_left = gv_dataContent.find('div.gv-header-left'); 109: var gv_header_right = gv_dataContent.find('div.gv-header-right'); 110: var gv_data_left = gv_dataContent.find('div.gv-data-left'); 111: var gv_data_right = gv_dataContent.find('div.gv-data-right'); 112: if (lockColumns == colsCount) { 113: gv_header_right.hide(); gv_data_right.hide(); 114: } else { 115: if (rightAreaWidth > 0) { 116: gv_header_right.width(rightAreaWidth); 117: gv_data_right.width(rightAreaWidth + 18); 118: } 119: } 120: var gvData_header_left = gvData.clone(); 121: gvData_header_left.find('tr:gt(0)').remove(); 122: 123: var gvData_header_right = gvData_header_left.clone(); 124: gv_header_right.find('tr th').remove(); 125: 126: gv_data_right.find('tr:eq(0)').prepend(gvData_header_left.find('th:gt(' + lockColumns + ')').clone()); 127: gvData_header_right.find('th:lt(' + rightCols + ')').remove(); 128: gvData_header_left.find('th:gt(' + leftCols + ')').remove(); 129: var colIndex = 0; 130: 131: function setThs(jqTr, jqHeader, isLeft) { 132: // var trHtml = '';
133: var trHtml = '
';
134: jqTr.find('th').each(function (j) {
135: trHtml += '
'; 136: if (removeLeftHeaderStrBySplit != '') { 137: var splitStrs = $(this).text().split(removeLeftHeaderStrBySplit); 138: trHtml += splitStrs.length > 1 ? splitStrs[1] : splitStrs[0]; 139: } else if (removeRightHeaderStrBySplit != '') { 140: var splitStrs = $(this).text().split(removeRightHeaderStrBySplit); 141: trHtml += splitStrs[0]; 142: } 143: else 144: trHtml += $(this).html(); 145: trHtml += '
';
146: colIndex++;
147: });
148: trHtml += '
';
149: jqHeader.prepend(trHtml);
150: }
151:
152: //设置左侧头部HTML
153: setThs(gvData_header_left, gv_header_left, true);
154: //设置右侧头部HTML
155: setThs(gvData_header_right, gv_header_right, false);
156: // var gvData_Data_left = $('
');
157: var gvData_Data_left = $('
');
158: var gvData_Data_right = $('
');
159: gvData.find("tr:gt(0)").each(function (i) {
160: var tr = $(this);
161: var trLeft = tr.clone();
162: var trRight = tr.clone();
163: trLeft.find('td:gt(' + leftCols + ')').remove();
164: trRight.find('td:lt(' + rightCols + ')').remove();
165: colIndex = 0;
166: function setTrTds(tr_left, gvData_Data_left, tr_right, gvData_Data_right, trInfo) {
167: var trLeftHtml = '
';
173: var trRightHtml = trLeftHtml;
174: tr_left.find('td').each(function (j) {
175: trLeftHtml += '
' + $(this).html() + '
';
176: colIndex++;
177: });
178: tr_right.find('td').each(function (j) {
179: trRightHtml += '
' + $(this).html() + '
';
180: colIndex++;
181: });
182: trLeftHtml += '
'; trRightHtml += '
';
183: var jqLeftTrHrml = $(trLeftHtml); var jqRightTrHrml = $(trRightHtml);
184: if (options.rowClick !== undefined) {
185: jqLeftTrHrml.bind('click', { tds: trInfo.find('td'), rIndex: i, isLeft: true }, options.rowClick);
186: jqRightTrHrml.bind('click', { tds: trInfo.find('td'), rIndex: i, isLeft: false }, options.rowClick);
187: }
188: if (hoverRowStyle != '') {
189: jqLeftTrHrml.hover(function () { jqLeftTrHrml.addClass(hoverRowStyle); jqRightTrHrml.addClass(hoverRowStyle); }, function () { jqLeftTrHrml.removeClass(hoverRowStyle); jqRightTrHrml.removeClass(hoverRowStyle); });
190: jqRightTrHrml.hover(function () { jqLeftTrHrml.addClass(hoverRowStyle); jqRightTrHrml.addClass(hoverRowStyle); }, function () { jqLeftTrHrml.removeClass(hoverRowStyle); jqRightTrHrml.removeClass(hoverRowStyle); });
191: }
192: gvData_Data_left.append(jqLeftTrHrml);
193: gvData_Data_right.append(jqRightTrHrml);
194: }
195: setTrTds(trLeft, gvData_Data_left, trRight, gvData_Data_right, tr);
196: });
197: gv_data_left.prepend(gvData_Data_left);
198: gv_data_right.prepend(gvData_Data_right);
199: if (options.isHideGridView !== undefined && options.isHideGridView)
200: gvData.hide();
201: if (isRemoveGridView)
202: gvData.remove();
203: if (leftGroupCols != '' && rightGroupCols != '') {
204: dataAreaHeight -= 62;
205: colIndex = 0;
206: function calcGroupCol(groupCols) {
207: var groupThs = groupCols.find('.gv-div-th');
208: groupThs.each(function (i) {
209: var col_width = 0;
210: if ($(this).attr('colspan') !== undefined) {
211: var colSpan = parseInt($(this).attr('colspan'));
212: for (var i = 0; i < colSpan; i++) {
213: col_width += colsLengsArr[colIndex];
214: colIndex++;
215: }
216: col_width += (colSpan - 1);
217: }
218: else if ($(this).attr('rowspan') !== undefined) {
219: var rowspan = parseInt($(this).attr('rowspan'));
220: col_height = rowspan * 30 + (rowspan - 1);
221: $(this).height(col_height).css('border-bottom-style', 'none');
222: col_width = colsLengsArr[colIndex];
223: if (colIndex <= leftCols)
224: gv_header_left.find('.gv-div-th').eq(colIndex).html('').css('border-top-style', 'none');
225: else if (colIndex >= rightCols)
226: gv_header_right.find('.gv-div-th').eq(colIndex - lockColumns).html('').css('
你可能感兴趣的:(Extjs)
Next.js博客项目-快速起步
Ktovoz
nextjs javascript 开发语言 react 前端
作者:KTO原文:Next.js博客项目-快速起步简介:从nextjs博客模板开始,快速配置搭建自己的博客项目。部署出来的网站样式可以参考原文的网站。Next.js博客项目-快速起步使用的模板我们使用的模板是:tailwind-nextjs-starter-blog该模板有1.0版本和2.0版本。本文以1.0版本为例进行介绍。1.环境配置安装Node.js首先,确保你的机器上已安装Node.js。
关于Jquery基本内容一
gloria123_
jquery 前端 javascript
jQuery(jQ)html+css+js1jQ是一个js库,封装了大量的特定的集合(函数和方法)如animate()、css()、show()等2使用jQ大大提高开发效率,简化dom操作常见的js库jQueryYUIDojoExtJszeptojQuery选择器$(selector)筛选方法parent()$(“li”).parent()children(selector)$(“ul”).chi
探索未来SaaS开发的新范式:AWS + React SaaS 模板
潘俭渝Erik
探索未来SaaS开发的新范式:AWS+ReactSaaS模板saas-templateSaaStemplateforAWS,Amplify,React,NextJSandChakra项目地址:https://gitcode.com/gh_mirrors/sa/saas-template在快速发展的科技领域中,高效、可靠的SaaS(Software-as-a-Service)开发框架是创新者的得力工
给没有登录认证的web应用添加登录认证(openresty lua实现)
dgiij
前端 openresty lua
这阵子不是deepseek火么?我也折腾了下本地部署,ollama、vllm、llama.cpp都弄了下,webui也用了几个,发现nextjs-ollama-llm-ui小巧方便,挺适合个人使用的。如果放在网上供多人使用的话,得接入登录认证才好,不然所有人都能蹭玩,这个可不太妙。我是用openresty反向代理将webui发布出去的,有好几种方案实现接入外部登录认证系统。首先是直接修改nextj
Nextjs项目服务器部署(简)
风吹落叶花飘荡
服务器 运维
文章目录一、nextjs一、安装PM2二、使用PM2启动Next.js应用三、配置自动重启四、设置系统服务(持久化)五、常用命令六、验证部署注意事项后面记得改要将Next.js项目的npmrunstart注册为系统服务并实现异常自动重启,推荐使用PM2进程管理工具。以下是具体步骤:一、nextjs1、package安装npminstall2、项目编译npmrunbuild3、项目运行一、安装PM2
【结束】JS如何不通过input的onInputFileChange使用本地mp4文件并播放,nextjs下放入public文件的视频用video标签无法打开
kiramario(长期接受兼职机会)
javascript 音视频 开发语言
本地不用input标签获取video视频并播放浏览器没有像JAVA这些语言之类的IO代码:Yourbrowserdoesnotsupportthevideotag.functionshow(){fetch("file:///E:/video/test1.mp4").then(response=>{returnresponse.arrayBuffer()}).then(ab=>{constvdo=U
ubuntu部署小笔记-采坑
淳杰
linux 前端 java ubuntu 笔记 linux
ubuntu部署小笔记搭建前端+控制端+后端前端nginx反向代理使用ubuntu部署nextjs项目问题一如何访问端口号配置后台运行该进程pm2问题二包体过大生产环境下所需文件问题三部署在vercel时出现的问题需要魔法访问后端api时,必须使用==https==协议电脑端访问正常,手机端出现异常控制器部署路由正常,但是刷新后提示404的问题相对路径问题后端部署在实际将项目部署到linux服务器
Connect 4 2-player mode
后端
Project2:Connect4Duedateandtime:Wed,2/19/25,11:59pmCheckpoint:Wed,2/12/24,11:59amiGPTAIAssistant:https://nextjs-chat-mu-olive.vercel.app/AvailableforallstudentsM-Fbefore8am&after5pm,alldaySat/SunOverv
nextjs中集成富文本编辑器wangEditor
不cong明的亚子
前端 nodejs react 前端 next.js 富文本编辑器
半天实现的NextJS轮子项目
前端next.js独立开发者
缘起最近在学习NextJS,并且从去年的AI崛起,独立开发者这个职业逐渐火了起来,很多项目都是使用NextJS实现的,NextJS也被更多的开发者熟悉,之所以选择做一个landingpage,就是独立开发者都需要一个landingpage来展示自己的作品,所以有了本项目。HorizonWingLandingPage一个使用Next.js、TailwindCSS和next-intl构建的现代化多语言
nodejs 实现加载 huggingface local embedding model 方法
gaohongfeng1
embedding node.js transformer
耗尽两天出坑,整理过程如下,希望对遇到问题的人得到帮助!!!首先nodejs在大模型生态上,坑还是超级多,尤其是对我不熟悉nodejs。我没有从零创建项目,比如用npminit方法,而是使用的一个开源项目:gitclonehttps://github.com/langchain-ai/langchain-nextjs-template.git基于这个项目本身pnpmdev页面显示正常,然后创建li
探索未来:golang-nextjs-portable,轻量级的跨平台应用框架
郝赢泉
探索未来:golang-nextjs-portable,轻量级的跨平台应用框架golang-nextjs-portableGoprogramwithembeddedNext.jsapp.项目地址:https://gitcode.com/gh_mirrors/go/golang-nextjs-portable在现代开发领域,融合不同技术栈以创造高效、便捷的应用已成为趋势。今天,我们来探讨一个创新项目
NextJs - 服务端组件如何拿到当前页面的URL或者参数
Zong_0915
javascript 前端 开发语言 NextJs
NextJs-服务端组件如何拿到当前页面的URL或者参数前言一.NextJs如何拿到当前页面URL二.NextJs拿URL参数的两种方式前言NextJs中,如果你是服务端组件,并且是App路由模式,如果想拿到当前URL,我们只能通过中间件获取,并通过header来实现交互。想再学习下中间件的可以参考我的这篇文章:NextJs初级篇-安装|路由|中间件一.NextJs如何拿到当前页面URL我们编写根
NextJs - antd5 降级兼容方案
Zong_0915
NextJs antd 前端
NextJs-antd5降级兼容方案前言一.降级解决方案1.1解决message等通知静态方法的样式丢失问题1.1解决非静态的样式兼容前言目前antd5对于SSR的兼容还有各方面都是很不错的,比如性能、UI设计等,不过,我们作为开发人员,在使用antd5作为UI组件库的时候,还需要考虑版本兼容问题,这里就说明下NextJs中如何进行antd5的降级。和本篇内容有关的前序文章:NextJs-SSR渲
Mongodb Error: queryTxt ETIMEOUT xxxx.wwwdz.mongodb.net
佛一脚
error react mongodb 数据库
背景每天都能遇到奇怪的问题,做个记录,以便有缘人能得到帮助!换了一台电脑开发nextjs程序。需要连接mongodb数据,对数据进行增删改查。上一台电脑好好的程序,新电脑死活连不上mongodb数据库。同一套代码,没任何修改,搞得我怀疑人生了,打开浏览器进入mongodb官网毫无问题,也能进入线上系统查看数据,网络应该是没问题。于是我尝试了一下手机热点,这次代码能正常跑起来,连接数据库了!!!是不
【网络安全】URL解析器混淆绕过CSP实现XSS
秋说
网络安全 web安全 xss 漏洞挖掘
未经许可,不得转载。文章目录前言正文前言许多流行的静态网站生成器都存在图像CDN功能,它们通过优化网站中的图像来加快页面加载速度。例如:1、OptimizingImages|Next.js利用内置的next/image组件优化图像(nextjs.org)2、NuxtImage:Nuxt应用的图像优化即插即用的图像优化功能,使用内置优化器对图像进行调整(image.nuxt.com)这些工具的目标都
Java 上传读取Excel文件
Ben_1043556915
Java进阶 java servlet 开发语言
Web中導入Excel文件ExtJs前端代碼://=========上傳Excel=============================uploadPanel=newExt.form.FormPanel({fileUpload:true,id:'fileUploadForm',frame:true,labelAlign:'right',buttonAlign:'center',labelWid
NextJs 请求数据 (fetch axios)
Nightne
reactjs es6
NextJs请求数据(fetchaxios)在使用nextJs请求数据之前首先我们来说一下nextJsnextJs是一个轻量级的react服务端渲染应用框架,所以他不用考虑前端经常要涉及到的跨域nextJs不用写router即路由的配置只需在pages下创建js文件即生成路由路径例如创建about.js就可以用过localhost:3000/about访问的到请求数据官方推荐的是fetch注意fe
nextjs代理转发fetch请求封装
lllomh
# SSR # React 我的代码世界 vue.js java node.js nuxt
demo请狠狠的戳这里https://download.lllomh.com/cliect/#/product/G909746950517113一.配置代理使用create-next-app创建的Next.js项目配置接口跨域代理转发需要用到customserver功能。先安装好express和http-proxy-middlewareyarnaddexpresshttp-proxy-middle
初步认知Next.js中ISR/RSC/Edge Runtime/Streaming等新概念
星野睡不醒
Web nextjs react isr react18 js
前言浅窥nextjs到目前v12版本的几个重点新概念,我们有:定义说明ISR增量静态渲染EdgeRuntime边缘运行时StreamingSSR流式传输SSRReactServerComponents服务器组件下面我们对这几个新概念进行一个初步的认知,在阅读前,我们默认读者已经预备了nextjs的基本知识。含义认知ISRSSR、SSG这两个是冷饭,我们都耳熟能详,那所谓ISR增量再渲染的概念,其实
extjs 中store 关于baseParams的一个bug
hwssz
extjs action function null
困扰于roload参数不变的问题,很幸运在网上找到了答案,贴在下面:http://www.javaeye.com/topic/713163ExtJs中,我们使用GirdPanel的时候往往需要给后台传递查询条件。一般是通过修改Store的baseParams。Js代码varstore=GirdPanel.getStore();store.baseParams={查询条件}store.reload(
NextJS + Trpc + PayloadCMS + MongoDB 自定义服务器搭建
长沙彭小黑
mongodb node.js react.js
自定义服务器启动相关依赖dotenv读取env文件数据expressnode框架基础示例如下//src/server/index.tsimport'dotenv/config';importexpressfrom'express';importchalkfrom'chalk';constport=Number(process.env.PORT)||3000;constapp=express();c
Astro + NextUI 搭建个人博客(导航组件篇)
Astro简介由于我之前的个人博客是Vue3+Quasar+Koa+MySql搭建的,整体就是SPA的思路,作为练手倒是可以锻炼前后端各方面的能力。但考虑到后期的迁移和更新等,实在过于麻烦,个人博客其实使用SSR或SSG之类的框架就行了,比如Nextjs,Nuxtjs,Remix等等。于是我接触到了Astro这个框架,它厉害的是不与任何前端框架进行强行绑定,比如Nextjs是与React强绑定的,
Expo Router + Supabase使用流程
懒编程-二两
unsetunset前言unsetunsetExpo是一个React-native生态中的一个工具包,提供了非常多的功能,ExpoRouter是Expo最近推出的功能,其效果类似于Nextjs的router,可以基于目录结构来实现路由。Supabase是一个开源的postgres数据库,还带有用户体系功能,可以快速实现login、register这些功能。我将记录一下,我使用这2个工具,构建基础基
【NextJS】nextjs+qiankun遇ReferenceError: window is not defined
陀螺蚁
Web前端 # React javascript 前端 react.js
实验环境:qiankun:^2.10.16next:14.1.0react:^18.2.0根据官方手册快速上手教程(链接)构建主程序实验代码:qiankun部分://file:micro-base/plugins/qiankun/index.tsimporttype{AppMetadata}from'qiankun';import{registerMicroApps,start}from"qian
【NextJS】整个项目跨域配置
陀螺蚁
Web前端 # React 前端 node.js next.js
项目跨域是指:本项目作为被访问方,由另一个项目对本项目发起fetch等动作获取数据页面数据实验环境:next:14.1.0react:^18配置文件:next.config.[mjs|js|ts]假定原始范本内容:/**@type{import('next').NextConfig}*/constnextConfig={};exportdefaultnextConfig;项目跨域配置:/**@ty
Nextjs styled-jsx animation
aibinMr
Nextjs自带的styled-jsx(v3.2.1)可能是不支持css3动画中@keyframes,多次尝试失败,现在采用把@keyframes写入css文件中,通过页面入口引入,(注意,在组件内部使用Head组件会编译出错)importReactfrom'react'importHeadfrom'next/head'classIndexextendsReact.Component{render
Astro + NextUI 搭建个人博客(导航组件篇)
Astro简介由于我之前的个人博客是Vue3+Quasar+Koa+MySql搭建的,整体就是SPA的思路,作为练手倒是可以锻炼前后端各方面的能力。但考虑到后期的迁移和更新等,实在过于麻烦,个人博客其实使用SSR或SSG之类的框架就行了,比如Nextjs,Nuxtjs,Remix等等。于是我接触到了Astro这个框架,它厉害的是不与任何前端框架进行强行绑定,比如Nextjs是与React强绑定的,
浏览器historyAPI和Next路由掉坑记录
sasaraku.
前端 reactjs
浏览器historyAPI和Next路由掉坑记录浏览器操控历史记录真的好大一个坑啊,我的天,看上去好像99%的浏览器都对history兼容良好,实际上呢?啊,怎么某个操作突然就不好使了,为什么这里能跳到那里,为什么nextJS突然就报错了,是next的原因还是啥?本文记录了开发一个“多步骤页面拆分成多个页面”的需求研发过程。因为采用NEXT的SSR模式,每一次刷新页面都会发起一个新的http请求,
155套JSP源码
梦の落花
java 开发语言 jsp
项目地址:文件分享包括:ERP管理系统(jsp+servlet)、Java聊天室程序(java)、车辆管理系统(struts+hibernate+spring+oracle)、图书管理系统(struts+hibernate+spring+ext)学生成绩管理系统(SSH+MYSQL)、ExtJS2.2开源网络硬盘系统_dogdisk、简易java开源订销管理系统、Java网络爬虫(蜘蛛)源码Jsp
312个免费高速HTTP代理IP(能隐藏自己真实IP地址)
yangshangchuan
高速 免费 superword HTTP代理
124.88.67.20:843
190.36.223.93:8080
117.147.221.38:8123
122.228.92.103:3128
183.247.211.159:8123
124.88.67.35:81
112.18.51.167:8123
218.28.96.39:3128
49.94.160.198:3128
183.20
pull解析和json编码
百合不是茶
android pull解析 json
n.json文件:
[{name:java,lan:c++,age:17},{name:android,lan:java,age:8}]
pull.xml文件
<?xml version="1.0" encoding="utf-8"?>
<stu>
<name>java
[能源与矿产]石油与地球生态系统
comsci
能源
按照苏联的科学界的说法,石油并非是远古的生物残骸的演变产物,而是一种可以由某些特殊地质结构和物理条件生产出来的东西,也就是说,石油是可以自增长的....
那么我们做一个猜想: 石油好像是地球的体液,我们地球具有自动产生石油的某种机制,只要我们不过量开采石油,并保护好
类与对象浅谈
沐刃青蛟
java 基础
类,字面理解,便是同一种事物的总称,比如人类,是对世界上所有人的一个总称。而对象,便是类的具体化,实例化,是一个具体事物,比如张飞这个人,就是人类的一个对象。但要注意的是:张飞这个人是对象,而不是张飞,张飞只是他这个人的名字,是他的属性而已。而一个类中包含了属性和方法这两兄弟,他们分别用来描述对象的行为和性质(感觉应该是
新站开始被收录后,我们应该做什么?
IT独行者
PHP seo
新站开始被收录后,我们应该做什么?
百度终于开始收录自己的网站了,作为站长,你是不是觉得那一刻很有成就感呢,同时,你是不是又很茫然,不知道下一步该做什么了?至少我当初就是这样,在这里和大家一份分享一下新站收录后,我们要做哪些工作。
至于如何让百度快速收录自己的网站,可以参考我之前的帖子《新站让百
oracle 连接碰到的问题
文强chu
oracle
Unable to find a java Virtual Machine--安装64位版Oracle11gR2后无法启动SQLDeveloper的解决方案
作者:草根IT网 来源:未知 人气:813标签:
导读:安装64位版Oracle11gR2后发现启动SQLDeveloper时弹出配置java.exe的路径,找到Oracle自带java.exe后产生的路径“C:\app\用户名\prod
Swing中按ctrl键同时移动鼠标拖动组件(类中多借口共享同一数据)
小桔子
java 继承 swing 接口 监听
都知道java中类只能单继承,但可以实现多个接口,但我发现实现多个接口之后,多个接口却不能共享同一个数据,应用开发中想实现:当用户按着ctrl键时,可以用鼠标点击拖动组件,比如说文本框。
编写一个监听实现KeyListener,NouseListener,MouseMotionListener三个接口,重写方法。定义一个全局变量boolea
linux常用的命令
aichenglong
linux 常用命令
1 startx切换到图形化界面
2 man命令:查看帮助信息
man 需要查看的命令,man命令提供了大量的帮助信息,一般可以分成4个部分
name:对命令的简单说明
synopsis:命令的使用格式说明
description:命令的详细说明信息
options:命令的各项说明
3 date:显示时间
语法:date [OPTION]... [+FORMAT]
eclipse内存优化
AILIKES
java eclipse jvm jdk
一 基本说明 在JVM中,总体上分2块内存区,默认空余堆内存小于 40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。 1)堆内存(Heap memory):堆是运行时数据区域,所有类实例和数组的内存均从此处分配,是Java代码可及的内存,是留给开发人
关键字的使用探讨
百合不是茶
关键字
//关键字的使用探讨/*访问关键词private 只能在本类中访问public 只能在本工程中访问protected 只能在包中和子类中访问默认的 只能在包中访问*//*final 类 方法 变量 final 类 不能被继承 final 方法 不能被子类覆盖,但可以继承 final 变量 只能有一次赋值,赋值后不能改变 final 不能用来修饰构造方法*///this()
JS中定义对象的几种方式
bijian1013
js
1. 基于已有对象扩充其对象和方法(只适合于临时的生成一个对象):
<html>
<head>
<title>基于已有对象扩充其对象和方法(只适合于临时的生成一个对象)</title>
</head>
<script>
var obj = new Object();
表驱动法实例
bijian1013
java 表驱动法 TDD
获得月的天数是典型的直接访问驱动表方式的实例,下面我们来展示一下:
MonthDaysTest.java
package com.study.test;
import org.junit.Assert;
import org.junit.Test;
import com.study.MonthDays;
public class MonthDaysTest {
@T
LInux启停重启常用服务器的脚本
bit1129
linux
启动,停止和重启常用服务器的Bash脚本,对于每个服务器,需要根据实际的安装路径做相应的修改
#! /bin/bash
Servers=(Apache2, Nginx, Resin, Tomcat, Couchbase, SVN, ActiveMQ, Mongo);
Ops=(Start, Stop, Restart);
currentDir=$(pwd);
echo
【HBase六】REST操作HBase
bit1129
hbase
HBase提供了REST风格的服务方便查看HBase集群的信息,以及执行增删改查操作
1. 启动和停止HBase REST 服务 1.1 启动REST服务
前台启动(默认端口号8080)
[hadoop@hadoop bin]$ ./hbase rest start
后台启动
hbase-daemon.sh start rest
启动时指定
大话zabbix 3.0设计假设
ronin47
What’s new in Zabbix 2.0?
去年开始使用Zabbix的时候,是1.8.X的版本,今年Zabbix已经跨入了2.0的时代。看了2.0的release notes,和performance相关的有下面几个:
:: Performance improvements::Trigger related da
http错误码大全
byalias
http协议 javaweb
响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行。
响应码分五种类型,由它们的第一位数字表示:
1)1xx:信息,请求收到,继续处理
2)2xx:成功,行为被成功地接受、理解和采纳
3)3xx:重定向,为了完成请求,必须进一步执行的动作
4)4xx:客户端错误,请求包含语法错误或者请求无法实现
5)5xx:服务器错误,服务器不能实现一种明显无效的请求
J2EE设计模式-Intercepting Filter
bylijinnan
java 设计模式 数据结构
Intercepting Filter类似于职责链模式
有两种实现
其中一种是Filter之间没有联系,全部Filter都存放在FilterChain中,由FilterChain来有序或无序地把把所有Filter调用一遍。没有用到链表这种数据结构。示例如下:
package com.ljn.filter.custom;
import java.util.ArrayList;
修改jboss端口
chicony
jboss
修改jboss端口
%JBOSS_HOME%\server\{服务实例名}\conf\bindingservice.beans\META-INF\bindings-jboss-beans.xml
中找到
<!-- The ports-default bindings are obtained by taking the base bindin
c++ 用类模版实现数组类
CrazyMizzz
C++
最近c++学到数组类,写了代码将他实现,基本具有vector类的功能
#include<iostream>
#include<string>
#include<cassert>
using namespace std;
template<class T>
class Array
{
public:
//构造函数
hadoop dfs.datanode.du.reserved 预留空间配置方法
daizj
hadoop 预留空间
对于datanode配置预留空间的方法 为:在hdfs-site.xml添加如下配置
<property>
<name>dfs.datanode.du.reserved</name>
<value>10737418240</value>
 
mysql远程访问的设置
dcj3sjt126com
mysql 防火墙
第一步: 激活网络设置 你需要编辑mysql配置文件my.cnf. 通常状况,my.cnf放置于在以下目录: /etc/mysql/my.cnf (Debian linux) /etc/my.cnf (Red Hat Linux/Fedora Linux) /var/db/mysql/my.cnf (FreeBSD) 然后用vi编辑my.cnf,修改内容从以下行: [mysqld] 你所需要: 1
ios 使用特定的popToViewController返回到相应的Controller
dcj3sjt126com
controller
1、取navigationCtroller中的Controllers
NSArray * ctrlArray = self.navigationController.viewControllers;
2、取出后,执行,
[self.navigationController popToViewController:[ctrlArray objectAtIndex:0] animated:YES
Linux正则表达式和通配符的区别
eksliang
正则表达式 通配符和正则表达式的区别 通配符
转载请出自出处:http://eksliang.iteye.com/blog/1976579
首先得明白二者是截然不同的
通配符只能用在shell命令中,用来处理字符串的的匹配。
判断一个命令是否为bash shell(linux 默认的shell)的内置命令
type -t commad
返回结果含义
file 表示为外部命令
alias 表示该
Ubuntu Mysql Install and CONF
gengzg
Install
http://www.navicat.com.cn/download/navicat-for-mysql
Step1: 下载Navicat ,网址:http://www.navicat.com/en/download/download.html
Step2:进入下载目录,解压压缩包:tar -zxvf navicat11_mysql_en.tar.gz
批处理,删除文件bat
huqiji
windows dos
@echo off
::演示:删除指定路径下指定天数之前(以文件名中包含的日期字符串为准)的文件。
::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
::本例假设文件名中包含的日期字符串(比如:bak-2009-12-25.log)
rem 指定待删除文件的存放路径
set SrcDir=C:/Test/BatHome
rem 指定天数
set DaysAgo=1
跨浏览器兼容的HTML5视频音频播放器
天梯梦
html5
HTML5的video和audio标签是用来在网页中加入视频和音频的标签,在支持html5的浏览器中不需要预先加载Adobe Flash浏览器插件就能轻松快速的播放视频和音频文件。而html5media.js可以在不支持html5的浏览器上使video和audio标签生效。 How to enable <video> and <audio> tags in
Bundle自定义数据传递
hm4123660
android Serializable 自定义数据传递 Bundle Parcelable
我们都知道Bundle可能过put****()方法添加各种基本类型的数据,Intent也可以通过putExtras(Bundle)将数据添加进去,然后通过startActivity()跳到下一下Activity的时候就把数据也传到下一个Activity了。如传递一个字符串到下一个Activity
把数据放到Intent
C#:异步编程和线程的使用(.NET 4.5 )
powertoolsteam
.net 线程 C# 异步编程
异步编程和线程处理是并发或并行编程非常重要的功能特征。为了实现异步编程,可使用线程也可以不用。将异步与线程同时讲,将有助于我们更好的理解它们的特征。
本文中涉及关键知识点
1. 异步编程
2. 线程的使用
3. 基于任务的异步模式
4. 并行编程
5. 总结
异步编程
什么是异步操作?异步操作是指某些操作能够独立运行,不依赖主流程或主其他处理流程。通常情况下,C#程序
spark 查看 job history 日志
Stark_Summer
日志 spark history job
SPARK_HOME/conf 下:
spark-defaults.conf 增加如下内容
spark.eventLog.enabled true spark.eventLog.dir hdfs://master:8020/var/log/spark spark.eventLog.compress true
spark-env.sh 增加如下内容
export SP
SSH框架搭建
wangxiukai2015eye
spring Hibernate struts
MyEclipse搭建SSH框架 Struts Spring Hibernate
1、new一个web project。
2、右键项目,为项目添加Struts支持。
选择Struts2 Core Libraries -<MyEclipes-Library>
点击Finish。src目录下多了struts