extjs4.2更换主题
Extjs_4.2.0_MVC教程

Extjs 4.2.0 MVC 架构来源于Ext互助团群。
内容:1. 文件结构2. 创建项目3. 定义控制器4. 定义视图5. 控制Grid6. 创建Model和Store7. 通过Model保存数据8. 保存到服务器端大型客户端程序通常都难写,难组织,难以维护。
项目经常由于增加功能,增加开发人员而很快失控。
Ext JS 4提出新的项目结构,不仅组织你的代码,并且减少代码量。
我们的系统结构延续“类MVC模式”,第一次引入Models(模型)和Controllers(控制器)的概念。
现在有很多MVC架构,他们或多或少有细微差别。
以下是我们对MVC的定义:∙Model是字段和对应数据的组合(例如User Model有username和password两个字段)。
Models知道如何通过数据包(data package)持久化,还可以通过associations(联系)同其他models关联。
Models很类似于Ext Js 3里的Record类,通常与Stores一起将数据展现到grids和其他components上。
∙View可以是任何类型的component,grids, trees和panels都是视图。
∙Controllers是一个特殊的地方,用来放使application工作的代码 - 可以是渲染视图的,初始化models的,或者其他的应用逻辑。
在这篇文档中我们将创建一个管理用户数据的简单应用,最终你将指导如何使用Ext JS 4应用架构去组织你的应用。
对系统架构来说,提供结构和保持一致性,与实际的类和framework代码同样重要。
遵循我们的惯例可以带来一系列非常重要的好处:∙所有的应用都以同一种方式工作,所以你只需要学习一次。
∙不同应用之间可以共享代码,因为他们都以同种方式工作∙你可以用我们的build工具来创建你的系统的优化版本供production使用------------------------------------------------------------------------------------------------------------ Ext JS 4对所有应用定义相同的目录结构。
ExtJS控件样式修改及美化

ExtJS控件样式修改及美化Extjs项⽬对富客户端开发提供了强有⼒的⽀持,甚⾄改变了前端的开发⽅式,使得开发变得更加趋向于“⾯向组件”。
对界⾯的美化⽽⾔,也是根本性的改变。
普通的⽹页美⼯⾯对extjs项⽬根本⽆法下⼿,需要脚本编写⼈员配合美⼯⼀起来完成⼯作(另外,spketIDE提供的样式修改⼯具也不理想)。
修改extjs的既有样式:1.覆盖extjs的样式表这⾥说的修改不是去改extjs本⾝的ext-all.css, 也不建议这样去做,这样会影响所有页⾯;⽽应该是⽤⾃定义的css去覆盖某些控件的默认样式。
⼤部分控件都有类似cls、style的属性供开发者去定制样式;但具体要设置样式的哪些属性才能达到特定效果,api⽂档就没说了。
⽐如要构建⼀个不带边框的panel,设置border、bodyborder属性是不⾏的,还是会有1px的边框。
⽹上去搜就更难了,准备好万能的firebug,⾃⼰摸索。
打开firebug,切换到html选项卡,找到panel对应的div节点,如下图:panel控件的基准样式是x-panel,其中的border-style:solid就是设置边框的,将其覆盖为border-style:none就成⽆边框的了。
具体⽅法:定义⽆边框的样式.my-panel-no-border{border-style:none},然后定义panel时设置baseCls属性:var mypanel = Ext.Panel({ baseCls:'my-panel-no-border', //其他属性});没⽂档,搜⼜不好搜,只能⽤这种最⼟的⽅法了。
类似的还有个需求,checkboxgroup⾥⾯的checkbox以列模式摆放时,各个checkbox是对齐的;现在需要对checkbox缩进摆放,体现出⼀定的层次关系,就像树形列表⼀样。
打开firebug,找checkbox的样式,加上什么padding之类的属性就⾏了。
教你如何更换Extjs皮肤35

要保存到 cookle 需要添加下面代码:
var cookieArr = window.document.cookie.split(";"); var css = null; for(var i=0;i<cookieArr.length;i++) { var arr = cookieArr[i].split("="); if(arr[0]=="css") { css = arr[1]; } }; alert(css); window.document.getElementsByTagName("link")[1].href="ext-
3.2.0/resources/css/"+css;
document.cookie="css="+css+";expires="+date.toGMTString(); }
});
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根保通据护过生高管产中线工资敷艺料设高试技中卷术资配0料不置试仅技卷可术要以是求解指,决机对吊组电顶在气层进设配行备置继进不电行规保空范护载高高与中中带资资负料料荷试试下卷卷高问总中题体资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况中卷下,安与要全过加,度强并工看且作护尽下关可都于能可管地以路缩正高小常中故工资障作料高;试中对卷资于连料继接试电管卷保口破护处坏进理范行高围整中,核资或对料者定试对值卷某,弯些审扁异核度常与固高校定中对盒资图位料纸置试,.卷保编工护写况层复进防杂行腐设自跨备动接与处地装理线置,弯高尤曲中其半资要径料避标试免高卷错等调误,试高要方中求案资技,料术编试交写5、卷底重电保。要气护管设设装线备备置敷4高、调动设中电试作技资气高,术料课中并中3试、件资且包卷管中料拒含试路调试绝线验敷试卷动槽方设技作、案技术,管以术来架及避等系免多统不项启必方动要式方高,案中为;资解对料决整试高套卷中启突语动然文过停电程机气中。课高因件中此中资,管料电壁试力薄卷高、电中接气资口设料不备试严进卷等行保问调护题试装,工置合作调理并试利且技用进术管行,线过要敷关求设运电技行力术高保。中护线资装缆料置敷试做设卷到原技准则术确:指灵在导活分。。线对对盒于于处调差,试动当过保不程护同中装电高置压中高回资中路料资交试料叉卷试时技卷,术调应问试采题技用,术金作是属为指隔调发板试电进人机行员一隔,变开需压处要器理在组;事在同前发一掌生线握内槽图部内纸故,资障强料时电、,回设需路备要须制进同造行时厂外切家部断出电习具源题高高电中中源资资,料料线试试缆卷卷敷试切设验除完报从毕告而,与采要相用进关高行技中检术资查资料和料试检,卷测并主处且要理了保。解护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
Extjs 4.2 Grid增删改及后台交互

Posted 周二, 07/02/2013 - 12:20 by admin上次发了Easyui Datagrid的增删改查的使用学习记录后一直想整理下基于Extjs4.2的Grid学习使用记录。
苦于抽不出时间,一直拖到现在。
不得不说,Extjs确实很强大,新版的Neptune 风格也很入我眼,但毕竟没怎么用过,第一次用,也不敢上来就搞什么自定义组件,也就纯粹的model+store+panel声明式创建表格了。
抛开分页,抛开排序,今天只简单讲一下最近使用中总结出来的rest形式增删改查数据的方式。
发现这种方式挺不错的,故而分享下。
代码Example如下:定义Modelview sourceprint?01.Ext.define('Person', {02.extend: 'Ext.data.Model',03.fields: [{name: 'id',04.type: 'int',eNull: true06.}, 'email', 'first', 'last'],07.validations: [{ type: 'length',08.field: 'email',09.min: 110.}, {type: 'length',11.field: 'first',12.min: 113.}, {type: 'length',14.field: 'last',15.min: 116.}]17.});构造store、创建panelview sourceprint?001.var store = Ext.create('Ext.data.Store', {002.autoLoad: true,003.autoSync: true,004.model: 'Person',005.proxy: {006.type: 'ajax',007.api: {008.read: 'url/read',//查询009.create: 'url/create',//创建010.update: 'url/update',//更新011.destroy: 'url/destroy'//删除012.},013.reader: {014.type: 'json',015.root: 'data'016.},017.writer: {018.type: 'json'019.}020.},021.listeners: {022.write: function(store, operation){023.var record = operation.getRecords()[0], = Ext.String.capitalize(operation.action), 025.verb;026.027.028.if(name == 'Destroy') {029.record = operation.records[0];030.verb = 'Destroyed';031.} else{032.verb = name + 'd';033.}034.Ext.example.msg(name, Ext.String.format("{0} user: {1}", verb, record.getId()));035.036.}037.}038.});039.040.var rowEditing = Ext.create('Ext.grid.plugin.RowEditing', {041.listeners: {042.cancelEdit: function(rowEditing, context) {043.// Canceling editing of a locally added, unsaved record: remove it044.if(context.record.phantom) {045.store.remove(context.record);046.}047.}048.}049.});050.051.var grid = Ext.create('Ext.grid.Panel', {052.renderTo: document.body,053.plugins: [rowEditing],054.width: 400,055.height: 300,056.frame: true,057.title: 'Users',058.store: store,059.iconCls: 'icon-user',060.columns: [{061.text: 'ID',062.width: 40,063.sortable: true,064.dataIndex: 'id'065.}, {066.text: 'Email',067.flex: 1,068.sortable: true,069.dataIndex: 'email',070.field: {071.xtype: 'textfield'072.}073.}, {074.header: 'First',075.width: 80,076.sortable: true,077.dataIndex: 'first',078.field: {079.xtype: 'textfield'080.}081.}, {082.text: 'Last',083.width: 80,084.sortable: true,085.dataIndex: 'last',086.field: {087.xtype: 'textfield'088.}089.}],090.dockedItems: [{091.xtype: 'toolbar',092.items: [{093.text: 'Add',094.iconCls: 'icon-add',095.handler: function(){096.// empty record097.store.insert(0, new Person());098.rowEditing.startEdit(0, 0);099.}100.}, '-', {101.itemId: 'delete',102.text: 'Delete',103.iconCls: 'icon-delete',104.disabled: true,105.handler: function(){106.var selection =grid.getView().getSelectionModel().getSelection()[0]; 107.if(selection) {108.store.remove(selection);109.}110.}111.}]112.}]113.});114.grid.getSelectionModel().on('selectionchange', function(selModel, selections){115.grid.down('#delete').setDisabled(selections.length === 0);很简单,使用api的方式,包括有增删查改,在前台的操作都会被extjs记录下来,再执行sync 的时候就可以自动根据状态请求相应的url了。
Extjs4.2 Html编辑器扩展

Extjs4.2 Html编辑器扩展目的:扩展Extjs4.2的htmleditor,添加“上传图片”,”上传附件”等功能。
效果图:调用方法:{xtype : 'htmleditor',name : 'content',fieldLabel : '公告内容',height : 350,plugins : [Ext.create('Ext.zc.form.HtmlEditorImage'),Ext.create('Ext.zc.form.HtmlEditorAttachment') ]}具体实现:HtmlEditorImage.js/***@Description Html编辑器插入图片控件*@author张川(cr10210206@)*/Ext.define('Ext.zc.form.HtmlEditorImage', {extend: 'Ext.util.Observable',alias: 'widget.zc_form_HtmlEditorImage',langTitle : '插入图片',langIconCls : 'heditImgIcon',init : function(view) {var scope = this;view.on('render', function(){scope.onRender(view);});},/***添加"插入图片"按钮**/onRender : function(view) {var scope = this;view.getToolbar().add({iconCls : ngIconCls,tooltip : {title : ngTitle,width : 60},handler : function(){scope.showImgWindow(view);}});},/***显示"插入图片"窗体**/showImgWindow : function(view){ var scope = this;Ext.create('Ext.window.Window',{ width : 400,height : 280,title : ngTitle,layout : 'fit',autoShow : true,modal : true,resizable : false,maximizable : false,constrain : true,plain : true,enableTabScroll : true,bodyPadding : '1 1 1 1',border : false,items : [{xtype : 'tabpanel',enableTabScroll : true,bodyPadding : '1 1 1 1',items : [{title : '上传本地图片',items : [{xtype : 'form',layout : 'column',autoScroll : true,border : false,defaults : {columnWidth : 1,labelWidth : 60,labelAlign : 'right',padding: '5 5 5 5',allowBlank : false},items : [{xtype : 'fileuploadfield',fieldLabel : '选择文件',beforeLabelTextTpl : zc.getStar(),buttonText : '请选择...',name : 'upload',emptyText : '请选择图片',blankText : '图片不能为空',listeners : {change : function(view,value,eOpts){scope.uploadImgCheck(view,value);}}},{xtype: 'fieldcontainer',fieldLabel: '图片大小',layout: 'hbox',defaultType: 'numberfield',defaults: {flex: 1,labelWidth : 20,labelAlign : 'right',allowBlank : true},items: [{fieldLabel : '宽',name : 'width',minValue : 1},{fieldLabel : '高',name : 'height',minValue : 1}]},{xtype : 'textfield',fieldLabel : '图片说明',name : 'content',allowBlank : true,maxLength : 100,emptyText : '简短的图片说明'},{columnWidth : 1,xtype:'fieldset',title: '上传须知',layout: {type: 'table',columns: 1},collapsible: false,//是否可折叠defaultType : 'label',//默认的Form表单组件items : [{html: '1.上传图片不超过100KB'},{html : '2.为了保证图片能正常使用,我们支持以下格式的图片上传'},{html : ' jpg,jpeg,png,gif'}]}],buttons : [{text : '保存',action : 'btn_save',iconCls : 'saveIcon',handler : function(btn){scope.saveUploadImg(btn,view);}},{text : '取消',iconCls : 'cancelIcon',handler : function(btn){btn.up('window').close();}}]},{title : '链接网络图片',items : [{xtype : 'form',layout : 'column',autoScroll : true,border : false,defaults : {columnWidth : 1,labelWidth : 60,labelAlign : 'right',padding: '5 5 5 5',allowBlank : false},items : [{xtype : 'textfield',fieldLabel : '图片地址',beforeLabelTextTpl : zc.getStar(),name : 'url',emptyText : '请填入支持外链的长期有效的图片URL',blankText : '图片地址不能为空',vtype : 'remoteUrl'},{xtype: 'fieldcontainer',fieldLabel: '图片大小',layout: 'hbox',defaultType: 'numberfield',defaults: {flex: 1,labelWidth : 20,labelAlign : 'right',allowBlank : true},items: [{fieldLabel : '宽',name : 'width',minValue : 1},{fieldLabel : '高',name : 'height',minValue : 1}]xtype : 'textfield',fieldLabel : '图片说明',name : 'content',allowBlank : true,maxLength : 100,emptyText : '简短的图片说明'}],buttons : [{text : '保存',action : 'btn_save',iconCls : 'saveIcon',handler : function(btn){scope.saveRemoteImg(btn,view);}},{text : '取消',iconCls : 'cancelIcon',handler : function(btn){btn.up('window').close();}}]}]}]}]});},/***上传图片验证**/uploadImgCheck : function(fileObj,fileName){var scope = this;//图片类型验证if(!(scope.getImgTypeCheck(scope.getImgHZ(fileName)))){ Ext.MessageBox.alert('温馨提示','上传图片类型有误');fileObj.reset();//清空上传内容return;}},/***获取图片后缀(小写)**/getImgHZ : function(imgName){//后缀var hz = '';//图片名称中最后一个.的位置var index = stIndexOf('.');if(index != -1){//后缀转成小写hz = imgName.substr(index+1).toLowerCase();}return hz;},/***图片类型验证**/getImgTypeCheck : function(hz){var typestr = 'jpg,jpeg,png,gif';var types = typestr.split(',');//图片类型for(var i = 0; i < types.length; i++){if(hz == types[i]){return true;}}return false;},/***上传图片**/saveUploadImg : function(btn,view){var scope = this;var windowObj = btn.up('window');//获取Window对象var formObj = btn.up('form');//获取Form对象if(formObj.isValid()){ //验证Form表单formObj.form.doAction('submit',{url : zc.bp() + '/bdata_Thtmleditor_getUploadImage.action',method : 'POST',submitEmptyText : false,waitMsg : '正在上传图片,请稍候...',timeout : 60000, // 60ssuccess : function(response, options){var result = options.result;if(!result.success){Ext.MessageBox.alert('温馨提示',result.msg);return;}scope.insertImg(view,result.data);windowObj.close();//关闭窗体},failure : function(response, options){Ext.MessageBox.alert('温馨提示',options.result.msg);}});}},/***保存远程的图片**/saveRemoteImg : function(btn,view){var scope = this;var windowObj = btn.up('window');//获取Window对象var formObj = btn.up('form');//获取Form对象if(formObj.isValid()){//验证Form表单var values = formObj.getValues();//获取Form表单的值scope.insertImg(view,values);windowObj.close();//关闭窗体}},/***插入图片**/insertImg : function(view,data){var url = data.url;var content = data.content;var width = data.width;var height = data.height;var str = '<img src="' + url + '" border="0" ';if(content != undefined && content != null && content != ''){ str += ' title="'+content+'" ';}if(width != undefined && width != null && width != 0){ str += ' width="'+width+'" ';}if(height != undefined && height != null && height != 0){ str += ' height="'+height+'" ';}str += ' />';view.insertAtCursor(str);}});HtmlEditorAttachment.js/***@Description Html编辑器插入附件控件*@author张川(cr10210206@)*/Ext.define('Ext.zc.form.HtmlEditorAttachment', { extend: 'Ext.util.Observable',alias: 'widget.zc_form_HtmlEditorAttachment', langTitle : '插入附件',langIconCls : 'attachmentIcon',init : function(view) {var scope = this;view.on('render', function(){scope.onRender(view);});},/***添加"插入附件"按钮**/onRender : function(view) {var scope = this;view.getToolbar().add({iconCls : ngIconCls,tooltip : {title : ngTitle,width : 60},handler : function(){scope.showAttachmentWindow(view);}});},/***显示"插入附件"窗体**/showAttachmentWindow : function(view){var scope = this;Ext.create('Ext.window.Window',{width : 400,height : 315,title : ngTitle,layout : 'fit',autoShow : true,modal : true,resizable : false,maximizable : false,constrain : true,plain : true,enableTabScroll : true,bodyPadding : '1 1 1 1',border : false,items : [{xtype : 'panel',bodyPadding : '1 1 1 1',items : [{xtype : 'form',layout : 'column',autoScroll : true,border : false,defaults : {columnWidth : 1,labelWidth : 60,labelAlign : 'right',padding: '5 5 5 5',allowBlank : false},items : [{xtype : 'fileuploadfield',fieldLabel : '选择文件',beforeLabelTextTpl : zc.getStar(),buttonText : '请选择...',name : 'upload',emptyText : '请选择文件',blankText : '文件不能为空',listeners : {change : function(view,value,eOpts){scope.uploadAttachmentCheck(view,value);}}},{xtype : 'textfield',fieldLabel : '附件名称',name : 'fileName',id : 'zc_form_HtmlEditorAttachment_form_fileName',maxLength : 50,emptyText : '请输入附件名称',blankText : '附件名称不能为空'},{xtype : 'textfield',fieldLabel : '附件说明',name : 'content',id : 'zc_form_HtmlEditorAttachment_form_content',allowBlank : true,maxLength : 100,emptyText : '简短的附件说明'},{columnWidth : 1,xtype:'fieldset',title: '上传须知',layout: {type: 'table',columns: 3},collapsible: false,//是否可折叠defaultType : 'label',//默认的Form表单组件items : [{html: '1.上传文档不超过100KB',colspan: 3},{html : '2.为了保证文档能正常使用,我们支持以下格式的文档上传',colspan: 3},{html : ' ',rowspan: 5},{html : 'MS Office文档:',colspan: 1,tdAttrs : {align : 'right'}},{html : 'doc,docx,ppt,pptx,xls,xlsx,vsd,pot,pps,rtf',colspan: 1},{html : 'WPS office系列:',colspan: 1,tdAttrs : {align : 'right'}},{html : 'wps,et,dps',colspan: 1},{html : 'PDF:',colspan: 1,tdAttrs : {align : 'right'}},{html : 'pdf',colspan: 1},{html : '纯文本:',colspan: 1,tdAttrs : {align : 'right'}},{html : 'txt',colspan: 1},{html : 'EPUB:',colspan: 1,tdAttrs : {align : 'right'}},{html : 'epub',colspan: 1}]}],buttons : [{text : '保存',action : 'btn_save',iconCls : 'saveIcon',handler : function(btn){scope.saveUploadAttachment(btn,view);}},{text : '取消',iconCls : 'cancelIcon',handler : function(btn){btn.up('window').close();}}]}]}]});},/***插入附件验证**/uploadAttachmentCheck : function(fileObj,fileName){var scope = this;var fileNameObj = Ext.getCmp('zc_form_HtmlEditorAttachment_form_fileName');var contentObj = Ext.getCmp('zc_form_HtmlEditorAttachment_form_content');//附件类型验证if(!(scope.getAttachmentTypeCheck(scope.getAttachmentHZ(fileName) ))){Ext.MessageBox.alert('温馨提示','上传附件类型有误');//清空插入内容fileObj.reset();fileNameObj.setValue('');contentObj.setValue('');return;}//设置默认的文件名称var defaultFileName = fileName.substr(0,stIndexOf('.'));fileNameObj.setValue(defaultFileName);contentObj.setValue(defaultFileName);},/***获取附件后缀(小写)**例如:txt**/getAttachmentHZ : function(AttachmentName){//后缀var hz = '';//附件名称中最后一个.的位置var index = stIndexOf('.');if(index != -1){//后缀转成小写hz = AttachmentName.substr(index+1).toLowerCase();}return hz;},/***附件类型验证**/getAttachmentTypeCheck : function(hz){var typestr = 'doc,docx,ppt,pptx,xls,xlsx,vsd,pot,pps,rtf,wps,et,dps,pdf,txt,epub' ;var types = typestr.split(',');//附件类型for(var i = 0; i < types.length; i++){if(hz == types[i]){return true;}}return false;},/***插入附件**/saveUploadAttachment : function(btn,view){var scope = this;var windowObj = btn.up('window');//获取Window对象var formObj = btn.up('form');//获取Form对象if(formObj.isValid()){ //验证Form表单formObj.form.doAction('submit',{url : zc.bp() + '/bdata_Thtmleditor_getUploadAttachment.action',method : 'POST',submitEmptyText : false,waitMsg : '正在上传附件,请稍候...',timeout : 60000, // 60ssuccess : function(response, options){var result = options.result;if(!result.success){Ext.MessageBox.alert('温馨提示',result.msg);return;}scope.insertAttachment(view,result.data);windowObj.close();//关闭窗体},failure : function(response, options){Ext.MessageBox.alert('温馨提示',options.result.msg);}});}},/***插入附件**/insertAttachment : function(view,data){var url = data.url;var fileName = data.fileName;var content = data.content;var str = ' <a target="_blank" href="' + url + '" ';if(content != undefined && content != null && content != ''){ str += ' title="'+content+'" ';}str += ' >'+fileName+'</a> ';view.insertAtCursor(str);}});。
ExtJs4.2静态文档的增删改

<!DOCTYPE html><html><head lang="en"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title><link href="../ext4.2/resources/css/ext-all-neptune.css" rel="stylesheet"/><script type="text/javascript" src="../ext4.2/ext-all-debug.js"></script><script type="text/javascript">Ext.onReady(function () {Ext.create('Ext.data.Store', {storeId: 'persons',fields: ['id', 'name', 'email', 'phone'],idProperty: 'id',data: {'items': [{ id: '0001', 'name': 'Lisa', "email": "lisa@", "phone": "555-111-1224" },{ id: '0002', 'name': 'Bart', "email": "bart@", "phone": "555-222-1234" },{ id: '0003', 'name': 'Homer', "email": "home@", "phone": "555-222-1244" },{ id: '0004', 'name': 'Marge', "email": "marge@", "phone": "555-222-1254" },{ id: '0005', 'name': 'Bart', "email": "bart@", "phone": "555-222-1234" },{ id: '0006', 'name': 'Homer', "email": "home@", "phone": "555-222-1244" },{ id: '0007', 'name': 'Marge', "email": "marge@", "phone": "555-222-1254" },{ id: '0008', 'name': 'Lisa', "email": "lisa@", "phone": "555-111-1224" },{ id: '0009', 'name': 'Bart', "email": "bart@", "phone": "555-222-1234" },{ id: '0010', 'name': 'Homer', "email": "home@", "phone": "555-222-1244" },{ id: '0011', 'name': 'Marge', "email": "marge@", "phone": "555-222-1254" },{ id: '0012', 'name': 'Bart', "email": "bart@", "phone": "555-222-1234" },{ id: '0013', 'name': 'Homer', "email": "home@", "phone": "555-222-1244" },{ id: '0014', 'name': 'Marge', "email": "marge@", "phone": "555-222-1254" }]},proxy: {type: 'memory',reader: {type: 'json',root: 'items',render: 'array'}},autoLoad: true});//行编辑器var rowEditing = Ext.create('Ext.grid.plugin.RowEditing', {clicksToMoveEditor: 2,clicksToEdit: 2,autoCancel: false,cancelEdit: function () {var me = this;if(me.editing){me.getEditor().cancelEdit();var record = me.context.record.getData(0);var id = record.id;if(id==''){var grid = me.context.grid;var items = grid.getSelectionModel().getSelection();grid.store.remove(items);}}},listeners: {'edit': function (editor, e) {// console.log(e);var id = '';if(e.record.data.id != ""){//有id,则为更新数据库//ajax向后台更新数据}else{//无id,则为插入一条记录//ajax向后台添加数据id="0015";}e.record.data.id = id;mit();}}})//单元格编辑器var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', {clicksToEdit: 2,autoCancel: false,listeners: {'edit': function (editor, e) {mit();}}})Ext.create('Ext.grid.Panel', {title: 'Grid表格',selType: "rowmodel", //选择模式行选择模式multiSelect: true,// selType:"cellmodel", //选择模式单元格选择模式columnLines: true, //列分割线stripeRows: true, //隔行换色store: Ext.data.StoreManager.lookup('persons'),defaults: {editable: true,value: "无"},columns: [{xtype: 'rownumberer'},{ text: '编号', dataIndex: 'id'},{ text: '姓名', dataIndex: 'name', editor: "textfield"},{ text: '电子邮件', dataIndex: 'email', flex: 1, editor: "textfield"},{ text: '电话号码', dataIndex: 'phone', editor: "textfield"}],height: 550,width: 700,tbar: [{xtype: 'button',text: '添加',handler: function () {// ponentQuery.query('grid')[0].getStore().add(p);rowEditing.cancelEdit();var p = {id: '',name: '',email: '',phone: ''}//insert :向store指定位置添加数据//loadData: 在store的最后添加一行数据Ext.data.StoreManager.lookup('persons').insert(0,p);rowEditing.startEdit(0,0);// console.log(ponentQuery.query('grid')[0].getStore());}},{xtype: 'button',text: '删除',handler: function () {var sm = ponentQuery.query('grid')[0].getSelectionModel();var personArr = sm.getSelection();if (personArr.length != 0) {Ext.Msg.confirm("提示", "共选中" + personArr.length + "条数据,是否确认删除?", function (btn) {if (btn == 'yes') {//先删除后台再删除前台//ajax 删除后台数据成功则删除前台数据;失败则不删除前台数据//Extjs 3.x 删除// Ext.Array.each(personArr, function (p) {//Ext.data.StoreManager.lookup('persons').remove(p);// });//Extjs 4.x 删除Ext.data.StoreManager.lookup('persons').remove(personArr);} else {return;}});} else {Ext.Msg.alert("提示", "无选中数据");}}}],bbar: [{xtype: 'pagingtoolbar',store: Ext.data.StoreManager.lookup('persons'),pageSize: 5,displayInfo: true,displayMsg: '第{0}条到第{1}条,一共{2}条记录',emptyMsg: "没有符合查询条件的信息"}],plugins: [rowEditing// cellEditing],renderTo: Ext.getBody()});// //编辑器提交修改的监听// //单元格编辑器提交的方法?// ponentQuery.query('grid')[0].on('edit',function(editor,e){ // //提交修改的内容// mit();// });});</script></head><body></body></html>。
idesk软件使用指导

主要功能和特点
壁纸管理
允许用户上传、下载和管理自己的壁纸,支持多种格式,如JPG、PNG等。
壁纸自动更换
可以根据用户设定的时间间隔自动更换壁纸,让桌面保持新鲜感。
屏幕保护程序
提供多种屏幕保护程序,如动态、静态等,保护用户的眼睛和减轻视觉疲劳。
在软件的网络设置中,配置网络连接参数,以便 软件能够正常访问远程桌面。
配置用户
根据实际需求,添加或删除用户账户,并设置相 应的权限。
高级配置
1 2
配置安全设置
在高级设置中,可以设置软件的安全选项,如防 火墙规则、加密传输等,以确保数据传输的安全 性。
配置远程桌面
在远程桌面设置中,可以设置远程桌面的分辨率、 颜色深度等参数,以满足不同的使用需求。
目的和目标受众
目的
本指南旨在帮助用户更好地使用idesk 软件,解决桌面管理问题,提高工作 效率。
目标受众
本指南适用于所有需要管理桌面的用 户,特别是那些经常需要在多个窗口 和任务之间切换的用户。
02
idesk软件概述
软件简介
是一款专注于桌面美化的软件,提供 丰富的桌面壁纸和主题,帮助用户打 造个性化的桌面环境。
个性化定制
iDesk软件支持个性化定制,用户可以根据自己的喜好和习惯进行设 置,打造专属的桌面环境。
安全可靠
iDesk软件在数据加密和隐私保护方面做得很好,能够确保用户数据 的安全性。
对未来的展望
更多智能化功能
未来iDesk软件可以加入更多智能化功能, 例如智能分类、智能推荐等,进一步提高 用户的工作效率。
01
演练一
ExtJS教程

第 1 章闪烁吧!看看extjs 那些美丽的例子。
第 1 章闪烁吧!看看extjs 那些美丽的例子。
1.1. 一切从extjs 发布包开始非常幸运的是,我们可以免费去 下载ext 发布包,里边源代码,api 文档,例子一应俱全。
不过要是想访问svn 获得最新的代码,就要花钱了。
不过我们现阶段只要这个免费的发布包就可以了,通过里边的范例,可以让我们体验一下ext 的风范。
下载地址:/download。
到写文档的此时此刻,咱们可以选择ext-1.1.1 或者是ext-2.0 下载。
明显可以看出来ext-2.0 的版本高,12 月4 日终于正式发布了,尚未经过详细测试,所以不敢说什么。
下面我们把两个版本都介绍一点儿。
1.2. 看看ext-1.1.1 的文档docs 目录下是api 文档,基本上所有的函数,配置,事件都可以在里边找到,直接打开index.html 就可以查看,左侧菜单还包含了对examples 目录下例子的引用,不过有些例子需要使用json 与后台做数据交换,必须放到服务器上才能看到效果。
还有一些后台代码是使用php 编写的,如果想看这些例子的效果,还需要配置php 运行环境。
如果你用java,而且jdk 在1.5 以上,不如直接装个resin-3 方便,它可以跑php 呢。
1.3. 看看ext-2.0 的文档api 文档依然在docs 目录下,虽然可以看到左边的菜单,但是点击之后,右侧的api 页面都是靠ajax 获得的,所以不能直接在本地查看了,你必须把整个解压缩后的目录放到服务器上,通过浏览器访问服务器,才能看到。
问为什么docs 打不开,只能看到一直loading 的兄弟,都是因为没把这些东西放到服务器上的原因。
2.0 中的api 文档中没有例子的链接了,你需要自己去examples 目录下找你需要的例子,然后打开看,当然还是有一些例子需要放在服务器上才能看到效果。
1.4. 为什么有的例子必须放在服务器上才能看到效果?因为有些例子里,用到Ajax 去后台读取数据,如果没在服务器上,Ajax 返回的状态一直是失败,也无法获得任何数据,所有就看不到正确的效果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
extjs4.2更换主题
目标
实现
1.视图层编辑各种主题样式
{
iconCls : 'themeIcon',
action : 'bbar_theme',
text : '[更换皮肤]',
menu : [{
xtype : 'menucheckitem',
group : 'theme',
checked : true,
text : '蓝色经典',
css : 'ext-all.css'
},{
xtype : 'menucheckitem',
group : 'theme',
text : '钢铁战士',
css : 'ext-all-gray.css'
}]
}
2.控制层获取更换主题事件修改主题并保存到Cookies中。
'view_layout_NorthView button[action=bbar_theme]' : { //设置主题render : function(btn,eOpts){
this.setTheme(btn);
}
},
/**
*设置主题
**/
setTheme : function(btn){
var extTheme = zc.getCookie('extTheme');//获取当前主题
var items = btn.menu.items.items;
Ext.each(items,function(item){
if(item.css == extTheme){
item.setChecked(true);
return;
}
});
},
/**
*更换主题
**/
changeTheme : function(item){
var linkid = 'extTheme';
var link = Ext.getDom(linkid);//获取CSS引用文件
var href = link.getAttribute('href');//获取href属性
var lastg = stIndexOf('/') + 1;//最后一个/所在的位置
var oldcss = href.substring(lastg);//旧的主题样式
var newcss = item.css;//新的主题样式
if(oldcss != newcss){
href = href.substring(0, lastg) + newcss;
link.setAttribute('href',href);//设置href属性
zc.setCookie(linkid,newcss,365);//保存到cookie中}
}
3.在引用extjs
4.2样式文件时从Cookies中获取当前主题样式。
<%
//获取cookie中设置的皮肤
String extTheme = "ext-all.css";//默认皮肤
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("extTheme")) {
extTheme = cookie.getValue();
break;
}
}
}
%>
<!-- EXT 样式文件 -->
<link rel="stylesheet"type="text/css"id="extTheme"
href="${pageContext.request.contextPath}/js/extjs/resources/css/<%=e xtTheme%>"></link>。