- 浏览: 1471135 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
luhouxiang:
写的很不错,学习了
Extjs 模块化动态加载js实践 -
kingkongtown:
如果想改成淘宝后台那样,可以在编辑器批量上传图片呢?
kissy editor 阶段体会 -
317966578:
兄弟我最近也在整jquery和caja 开放一些接口。在git ...
caja 原理 : 前端 -
liuweihug:
Javascript引擎单线程机制及setTimeout执行原 ...
setTimeout ,xhr,event 线程问题 -
辽主临轩:
怎么能让浏览器不进入 文档模式的quirks模式,进入标准的
浏览器模式与文本模式
<filter> <filter-name>Set Character Encoding</filter-name> <filter-class>filters.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> <init-param> <!-- Ajax important , charset=utf-8 其他都为gbk --> <param-name>ignore</param-name> <param-value>false</param-value> </init-param> </filter> <listener> <listener-class>hyjc.listener.CustomSessionListener</listener-class> </listener>
还是利用了 poll 的 方案 ,定时 刷新信息, 下一步打算利用长连接 来试试
生成了一个 Ext.window 就是聊天窗口了
Ext.onReady(function() { var chatWin = new Ext.Window({ width:800, height:500, title:'Ext聊天窗口测试版', renderTo:document.body, border :false, hidden :true, layout:'border', closeAction :'hide', collapsible :true, constrain :true, iconCls :'my-userCommentIcon', maximizable :true, items:[ { region:'west', id:'chat-west-panel', title:'用户面板', split:true, width: 170, minSize: 100, maxSize: 200, collapsible: true, constrain :true, //margins:'0 0 0 5', layout:'accordion', layoutConfig:{ animate:true }, items: [{ items: new Ext.tree.TreePanel({ id:'im-tree', rootVisible:false, lines:false, border :false, dataUrl: 'chat/updateChat.jsp', singleExpand :true, selModel:new Ext.tree.MultiSelectionModel(), root: new Ext.tree.AsyncTreeNode({ text:'Online', children:[{ text:'Sunrise', id:'SunriseIm', nodeType: 'async', singleClickExpand :true, expandable:true, expanded:true }] }) }) , title:'在线人员', //layout:'form', border:false, autoScroll:true, iconCls:'im_list', tools:[{ id:'refresh', qtip: '刷新在线信息', // hidden:true, handler: function(event, toolEl, panel) { reloadUser(); } }, { id:'close', qtip: '清除选定', // hidden:true, handler: function(event, toolEl, panel) { Ext.getCmp('im-tree').getSelectionModel().clearSelections(); } } ] },{ title:'Settings', html:'<p>Some settings in here.</p>', border:false, iconCls:'settings' }] }, { region:'center', layout:'border', items:[ { region:'center', title:'历史记录 ', id:'history_panel', autoScroll:true, iconCls :'my-userCommentIcon', tools:[{ id:'refresh', qtip: '注意:如果长时间没有收到对方回应,试一下', // hidden:true, handler: function(event, toolEl, panel) { // refresh logic } }] }, { region:'south', title:'聊天啦', layout:'fit', iconCls :'user_edit', autoScroll:true, height: 200, collapsible: true, //margins:'0 0 0 0', items:{ xtype:'form', baseCls: 'x-plain', autoHeight:true, autoWidth:true, bodyStyle: 'padding:10 10px 0;', defaults: { anchor: '95%' }, items:[ { xtype:'htmleditor', height:130, id:'htmleditor', hideLabel :true } ] } ,bbar :[{ text:'发送请输入Ctrl-Enter', handler:function() { sendmsg(); }, iconCls:'my-sendingIcon' } ,'-',{ text:'清除', handler:function() { Ext.getCmp("htmleditor").reset(); } } ] } ] } ] }); var query = location.search.substring(1);//获取查询串 var sessionId = SESSION;//Ext.urlDecode(query).sid; // 发送消息 function sendmsg() { Ext.getCmp("htmleditor").syncValue(); var content_value = Ext.getCmp("htmleditor").getValue(); if (content_value.trim() == '') { alert("您没有输入消息文本内容!"); Ext.getCmp("htmleditor").focus(true); return; } var receivers_values = []; var tree = Ext.getCmp('im-tree'); var receivers = tree.getSelectionModel().getSelectedNodes(); for (i = 0; i < receivers.length; ++i) { receivers_values.push(receivers[i].attributes.sessionId); } if (receivers_values.length == 0) { alert("您没有选择接收者!"); tree.focus(); return; } //alert(receivers_values.length); if (receivers_values.length > 1) { if (!confirm("您选择了多个接收者,是否继续?")) { return; } } var nickname_value = 'forget'; var pars = { "content":content_value, "receivers":"" + receivers_values, "sender":sessionId // "nickname":'forget' }; var conn = new Ext.data.Connection(); // 发送异步请求 conn.request({ // 请求地址 url: 'chat/sendmsg.jsp', method: 'post', params: pars, // 指定回调函数 callback: msgsent }); } function msgsent(options, success, response) { requestCount--; if (success) { try { var jsonObj = Ext.util.JSON.decode(response.responseText); } catch(e) { } if (jsonObj && jsonObj.success) { var cur = jsonObj.cur; var sessions = []; var c = node.childNodes; for (var i = 0; i < c.length; i++) { sessions[c[i].attributes.sessionId] = c[i].attributes; } if (cur) { var a = []; for (var j = 0; j < cur.receivers.length; j++) { a.push(sessions[cur.receivers[j]].loginName); } var msg = '<div style="margin:20px 5px 10px 5px"> <img src="js/ext/user_comment.png"/> {0} <b>{1}</b> 对 <b>{2}</b> 说:<br> </div>' ; var chat_record =new Ext.Element(document.createElement('div')); chat_record.addClass('chat_record'); chat_record.update('<span style="margin:0px 5px 0px 5px">'+cur.content+'</span>'); Ext.getCmp("history_panel").body.appendChild(chat_record); var canvas=new Ext.Element(document.createElement('canvas')); var size_chat=chat_record.getSize(); if(!Ext.isIE && size_chat.height < 100) { chat_record.setHeight(100); size_chat.height=100; } canvas.setSize(size_chat.width-30,size_chat.height); //canvas.setSize(size_chat.width-,40); chat_record.appendChild(canvas); if(window['G_vmlCanvasManager'] ) { G_vmlCanvasManager.initElement(canvas.dom); } draw_m(chat_record.dom.lastChild,'#FFB100'); var mc = String.format(msg, cur.time, sessions[cur.sender].loginName, a); Ext.getCmp("history_panel").body.insertHtml('beforeEnd', mc); Ext.getCmp("history_panel").body.scroll('b', 10000, { duration:0.1 }); } Ext.getCmp("htmleditor").reset(); } else if(response.result) alert(response.result); } else { if(response.responseText) alert(response.responseText); } } //event for source editing mode new Ext.KeyMap(Ext.getCmp("htmleditor").getEl(), [ { key: 13, ctrl:true, stopEvent :true, fn: sendmsg } ]); //event for normal mode Ext.getCmp("htmleditor").onEditorEvent = function(e) { this.updateToolbar(); var keyCode = (document.layers) ? keyStroke.which : e.keyCode; if (keyCode == 13 && e.ctrlKey) sendmsg(); //it'a my handler } var tree = Ext.getCmp('im-tree'); var node = tree.getNodeById('SunriseIm'); var requestCount = 0; function reloadUser() { if (requestCount == 10) { alert('服务器连接失败'); window.location = 'login.jsp'; return; } requestCount++; var conn = new Ext.data.Connection(); // 发送异步请求 conn.request({ // 请求地址 url: 'chat/updateChat.jsp', method: 'post', // 指定回调函数 callback: callback }); //回调函数 function callback(options, success, response) { requestCount--; if (success) { try { var jsonObj = Ext.util.JSON.decode(response.responseText); } catch(e) { } if (jsonObj) { var jsonNodes = jsonObj.nodes; var msgs = jsonObj.msgs; var cs = node.childNodes ; var nodes = {}; var sessions = {}; for (var i = 0; i < cs.length; i++) { nodes[cs[i].id] = cs[i]; } var user; for (var i = 0; i < jsonNodes.length; i++) { user = jsonNodes[i]; // alert(user.sessionId); sessions[user.sessionId] = user; if (nodes[user.id]) { nodes[user.id] = null; continue; } node.appendChild(user); } for (var id in nodes) { if (nodes[id]) node.removeChild(nodes[id]); } var msg = '<div style="margin:20px 5px 10px 5px"> <img src="js/ext/user_comment.png"/> {0} <b>{1}</b> 对 <b>{2}</b> 说:<br> </div>' ; if (msgs) { for (var i = 0; i < msgs.length; i++) { var a = []; for (var j = 0; j < msgs[i].receivers.length; j++) { a.push(sessions[msgs[i].receivers[j]].loginName); } var chat_record =new Ext.Element(document.createElement('div')); chat_record.addClass('chat_record'); chat_record.update('<span style="margin:0px 5px 0px 5px">'+msgs[i].content+'</span>'); Ext.getCmp("history_panel").body.appendChild(chat_record); var canvas=new Ext.Element(document.createElement('canvas')); var size_chat=chat_record.getSize(); if(!Ext.isIE && size_chat.height < 100) { chat_record.setHeight(100); size_chat.height=100; } canvas.setSize(size_chat.width-10,size_chat.height); //canvas.setSize(size_chat.width-,40); chat_record.appendChild(canvas); if(window['G_vmlCanvasManager'] ) { G_vmlCanvasManager.initElement(canvas.dom); } draw_m(chat_record.dom.lastChild,'#FFB100'); var mc = String.format(msg, msgs[i].time, sessions[msgs[i].sender].loginName, a); Ext.getCmp("history_panel").body.insertHtml('beforeEnd', mc); Ext.getCmp("history_panel").body.scroll('b', 10000, { duration:0.1 }); } if(!chatWin.isVisible()){ self.focus(); Ext.example.msg('叮当', '您有新的短消息 <a href="javascript:window.startChatWin()">查看</a>'); } } } else if(response.responseText) alert(response.responseText); } else { if(response.responseText) alert(response.responseText); } } } //chatWin.show(); //chatWin.setSize(0,0); //chatWin.hide(); if(!Ext.isIE) { chatWin.collapse(); } var chatTask = { run:reloadUser, //scope:this, interval: 5000 //1 second }; time_pro = new Ext.util.TaskRunner(); time_pro.start(chatTask); //chatWin.hide(); window.startChatWin = function (){ chatWin.show(); chatWin.center(); //Ext.getCmp('htmleditor').focus(); }; function draw_m(canvas,color){ var context = canvas.getContext("2d"); var width=canvas.width; var height2=canvas.height-4.5; var height=canvas.height; context.beginPath(); context.strokeStyle = color; context.moveTo(0.5,0.5+5); context.arc(5.5,5.5,5,-Math.PI,-Math.PI/2,false); context.lineTo(width-0.5-5,0.5); context.arc(width-0.5-5,5.5,5,-Math.PI/2,0,false); context.lineTo(width-0.5,height2-5); context.arc(width-0.5-5,height2-5,5,0,Math.PI/2,false); context.lineTo(width/2+3,height2); context.lineTo(width/2,height); context.lineTo(width/2-3,height2); context.lineTo(0.5+5,height2); context.arc(0.5+5,height2-5,5,Math.PI/2,Math.PI,false); context.lineTo(0.5,0.5+5); context.stroke(); } });
后台 见附件 ,主要是还要设一下 sessionListener
发表评论
-
Extjs 实践细节备忘 -3
2009-04-12 20:26 24371. dragdrop 继承层次 dd - ... -
Extjs 实践细节备忘 -2
2009-04-12 05:43 27551. grid 列宽问题 可以指定 每列的宽度数值 ... -
Extjs 实践细节备忘 -1
2009-04-11 01:47 2718在使用 extjs 开发 OAOP 应用中 ,除了API文档外 ... -
长字串换行问题
2009-03-01 23:10 5803很久没用过 ,textarea ... -
Extjs portal 应用初探
2009-02-24 23:09 6014近期在研究拖放的实现 ,看了看 Extjs 的 portal ... -
Extjs 模块化动态加载js实践
2009-01-09 18:12 23521前一段转载了一篇 透明加载外部 javascript ... -
Extjs 聊天窗口 -续3 用pushlet来实现
2008-12-23 22:16 16115前一篇 自己实现了http长连接 , 很繁琐,后 ... -
Extjs 聊天窗口 -续2 - http长连接的实现
2008-12-16 00:55 13347认为长连接就是有个http请求被服务器阻塞了 ,这样的话浏览 ... -
Extjs CRUD 模板
2008-12-12 00:52 7831也算是一个总结吧,备忘,总结了一个增删改查的例子,以后要达到的 ... -
Ext 树操作
2008-11-10 23:21 4520后台 树 节点 定义 menu_info { ... -
Ext 一个聊天窗口的设计
2008-11-10 00:26 37811.关键是要 弹性设计,自动适应浏览器 部件要: ... -
Ext.data.Store 与 GridFilters
2008-11-03 16:12 5374Store 每次 reload 会记着上次的参数,比如 pa ... -
Ext 实现 文件上传 进度显示
2008-10-24 18:15 5222利用了 ahxu-commons-fileuploadex-b ... -
Ext official doc - class-event-observer
2008-10-23 18:20 1450....ppt -
Ext 多文件上传面板扩展
2008-10-23 16:53 8386扩展了 Ext.Panel ,加入文件框列表 ,并控制删 ... -
Ext Grid 表头显示问题
2008-09-27 23:51 3353出现问题了,当 Grid div 放在 table 布局下的话 ... -
JSON marsh && unmarsh
2008-09-23 00:46 1996Ext 端用 //Encodes an Objec ... -
[extjs] formpanel 标准提交问题
2008-09-19 02:29 3345formpanel 的 标准提交 有 bug? var ta ... -
ComboBox 传值问题
2008-09-19 00:07 5305field -> textfield->trigg ... -
Ext 2 概述
2008-09-18 01:11 2305欢迎来到Ext 2.0。 在下列各章节中,你将会接触到E ...
相关推荐
perl516-perl-Locale-Maketext-1.22-19.el6.centos.alt.noarch.rpm
MATLAB仿真平台下的含碳捕集与垃圾焚烧虚拟电厂的协同优化调度策略研究:电转气技术下的能源利用与需求响应管理,MATLAB代码:计及电转气协同的含碳捕集与垃圾焚烧电厂优化调度 关键词:碳捕集 电厂 需求响应 优化调度 电转气协同调度 参考文档:《计及电转气协同的含碳捕集与垃圾焚烧电厂优化调度》完全复现 仿真平台:MATLAB+CPLEX 主要内容:代码主要做的是一个计及电转气协同的含碳捕集与垃圾焚烧电厂优化调度问题,基本调度框架是碳捕集电厂–电转气–燃气机组协同利用框架,碳捕集的 CO2 可作为电转气原料, 生成的天然气则供应给燃气机组; 并通过联合调度将碳捕集能耗和烟气处理能耗进行负荷转移以平抑可再生能源波动,使得风电 光伏实现间接可调度而被灵活利用,代码采用的是非智能算法求解,因为本文问题复杂智能算法难以求解,故使用的是yalmip+cplex求解器完成求解 这段代码是一个关于电转气协同的含碳捕集与垃圾焚烧电厂优化调度的程序。下面我将对程序进行详细分析。 首先,程序开始时进行了一些初始化的操作,包括清空命令窗口、清除变量和关闭所有图形窗口。 然后,定义了一系列的参数,这
shp格式,可直接导入arcgis使用
1、文件内容:snappy-1.1.0-3.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/snappy-1.1.0-3.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
perl516-perl-libs-5.16.3-19.el6.centos.alt.x86_64.rpm
1、文件内容:si-units-0.6.5-1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/si-units-0.6.5-1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:svrcore-devel-4.1.3-2.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/svrcore-devel-4.1.3-2.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
宠物管理系统(源码+数据库+论文+ppt)java开发ssm框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 整个网上宠物管理系统的设计与实现,主要实现的功能有以下几点: (1)前台用户:首页、宠物用品、宠物商店、宠物领养、宠物挂失、论坛信息、宠物资讯、个人中心、后台管理、购物车、客服咨询 (2)管理员:首页、个人中心、宠物分类管理、商品分类管理、宠物用品管理、宠物商店管理、宠物领养管理、用户管理、宠物寄存管理、用户领养管理、宠物挂失管理、论坛管理、管理员管理、系统管理、订单管理等功能; 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。
## 功能特点 1. 数据导入 - 支持Excel文件 - 支持CSV文件 - 数据预览 - 自动识别列 2. 图表类型 - 折线图 - 柱状图 - 饼图 - 散点图 - 箱线图 - 热力图 3. 图表设置 - 自定义标题 - 主题选择 - 轴标签设置 - 样式调整 4. 其他功能 - 实时预览 - 高清导出 - 多种格式 - 简单操作
perl516-perl-DBI-1.630-4.el6.centos.alt.x86_64.rpm
1、文件内容:strace-4.24-7.el7_9.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/strace-4.24-7.el7_9.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:sos-3.9-5.el7.centos.12.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/sos-3.9-5.el7.centos.12.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:srp_daemon-22.4-6.el7_9.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/srp_daemon-22.4-6.el7_9.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:supermin5-devel-5.1.19-1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/supermin5-devel-5.1.19-1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
找到image文件扫一扫获取授权
一个将 Ollama 与 Flask 框架结合的 Python 源码,创建一个 Web 服务,用户可以通过浏览器或其他工具向该服务发送请求,调用 Ollama 模型生成文本。
perl516-perl-DateTime-1.06-3.el6.centos.alt.x86_64.rpm
内容概要:本文档详细介绍了如何在不同操作系统(Windows、macOS 和 Linux)上安装 PyCharm这一集成开发环境(IDE)。文档不仅讲解了具体的下载渠道以及步骤指引——涵盖社区版和专业版的选择,而且还引导用户进行首次配置,包括外观定制、键盘布局选定以及必要的组件启用,并指出在首次使用的各个阶段可能会遇到的关键事项,像是授权激活。此外,也提到了在启动过程中,针对不同平台的一些特定注意事项,例如在 Mac 中的安全性和隐私设置、Linux 下基于命令行的解压缩与启动方法。 适合人群:初次接触 Python 编程或有意向使用 PyCharm 提高生产力的程序员,尤其是对 PyCharm 不太熟悉的技术新手。 使用场景及目标:为希望使用 PyCharm 开发 Python程序的学生或专业人士提供详尽的操作指南,使其能够顺利完成安装,并熟悉 IDE 的基本特性及高级特性的初步认识,从而快速着手实际项目的开发。 阅读建议:用户可以按自己的操作系统直接跳转相关章节,逐步依照文档步骤来进行安装与配置。同时关注每段文字末提到的独特提醒项以保证顺利地使用 IDE 进行编码工作。对于计划长期使用 PyCharm 的用户来说,还可以探索更多高级插件以满足自身开发需求。
perl516-perl-DateTime-TimeZone-1.63-5.el6.centos.alt.noarch.rpm
全新前端UI界面,多种前端交互特效让页面不再单调,进群页面群成员数,群成员头像名称,每次刷新页面随机更新不重复,最下面评论和点赞也是如此随机刷新不重复 进群页面简介,群聊名称,群内展示,常见问题后台一键开关方便控制,付费进群系统后台自定义你的内容,底部显示你所设置的进群金额,也可以修改付费获取某些资源,搭建者自己集思广益,搭建的知识工具里面的内容才是内核,运营起来才是王道