Extjs4.2 Html编辑器扩展
extjs4.2 日期控件扩展
extjs4.2 日期控件扩展目标Extjs4 日期控件,带年月日时分秒,效果图如下:调用方法:xtype: ‘zc_form_DatetimeField’实现DateTimeField.js/***@Description带时间的日期输入控件*@author张川(cr10210206@)*/Ext.define('Ext.zc.form.DateTimeField', {extend:'Ext.form.field.Date',alias: 'widget.zc_form_DatetimeField',requires: ['Ext.zc.form.DateTimePicker'],/***@cfg{String}format*The default date format string which can be overriden for localization support.The format must be valid*according to{@link Ext.Date#parse}.*/format : "Y-m-d H:i:s",/***@cfg{String}altFormats*Multiple date formats separated by"|"to try when parsing a user input value and it does not match the defined*format.*/altFormats : "Y-m-d H:i:s",createPicker: function() {var me = this,format = Ext.String.format;//修改picker为自定义pickerreturn Ext.create('Ext.zc.form.DateTimePicker',{pickerField: me,ownerCt: me.ownerCt,renderTo: document.body,floating: true,hidden: true,focusOnShow: true,minDate: me.minValue,maxDate: me.maxValue,disabledDatesRE: me.disabledDatesRE,disabledDatesText: me.disabledDatesText,disabledDays: me.disabledDays,disabledDaysText: me.disabledDaysText,format: me.format,showToday: me.showToday,startDay: me.startDay,minText: format(me.minText, me.formatDate(me.minValue)), maxText: format(me.maxText, me.formatDate(me.maxValue)), listeners: {scope: me,select: me.onSelect},keyNavConfig: {esc: function() {me.collapse();}}});},/***@private*/onExpand: function() {var value = this.getValue();//多传一个参数,从而避免时分秒被忽略。
使用WordPress插件进行网站功能扩展的方法
使用WordPress插件进行网站功能扩展的方法第一章:了解WordPress插件WordPress插件是一种用于扩展和增强WordPress网站功能的工具。
它们被设计成模块化的,可以添加到WordPress网站的核心代码之外,为网站添加特定的功能和特性。
在本章中,将介绍了解和使用WordPress插件的基本方法。
1.1 WordPress插件的分类WordPress插件根据其功能和特性可以分为多个类别。
常见的插件类别包括社交媒体插件、SEO插件、安全插件、eCommerce 插件等。
了解这些不同的插件类别将帮助我们选择适合我们网站需求的插件。
1.2 查找和安装插件要查找和安装WordPress插件,可以登录到WordPress后台,然后导航到“插件”>“安装插件”。
在搜索框中输入关键字,WordPress将列出与该关键字相关的插件。
通过阅读插件描述、用户评价和常见问题,我们可以判断插件是否适合我们的需求。
1.3 插件的使用和配置安装插件后,您可以在WordPress后台找到一个新的菜单或设置选项,用于管理和配置插件。
每个插件都有自己的设置界面,您可以根据需要进行自定义配置。
在插件设置界面上,您可以定义插件的行为、样式等,以满足特定的需求。
第二章:常用的WordPress插件在本章中,将介绍一些常用的WordPress插件,以供在扩展网站功能时进行选择和使用。
2.1 社交媒体插件社交媒体插件允许您将社交媒体分享按钮添加到您的网站上。
例如,您可以使用“AddToAny”插件来添加多个社交媒体分享按钮,以便访问者可以方便地分享您的内容到他们的社交媒体平台上。
2.2 SEO插件SEO插件可以帮助您优化您的网站内容,以便在搜索引擎中获得更好的排名。
例如,您可以通过安装并配置“Yoast SEO”插件来优化您的网站内容、标题和描述,以改善您的网站在搜索结果中的显示。
2.3 安全插件安全插件可以帮助您保护您的网站免受恶意攻击和破坏。
html可视化编辑器原理
html可视化编辑器原理
HTML可视化编辑器是一种基于图形用户界面的工具,用于
简化网页设计和开发过程。
它的原理是将HTML代码转化为
可视化的组件和属性,通过可拖拽、调整属性等操作来生成和修改网页的结构和样式。
具体而言,HTML可视化编辑器通常包括以下几个核心组件:
1. 代码解析器:将用户输入的HTML代码解析为可视化的树
状结构,其中包含节点元素、属性和文本内容。
2. 可视化组件库:提供预定义的可视化组件(如按钮、图片、表格等),用户可以通过拖拽这些组件来构建网页结构。
3. 属性编辑器:用于修改组件的属性,例如修改按钮的颜色、字体大小等。
属性编辑器可以根据当前选择的组件类型动态展示对应的属性选项。
4. 实时预览窗口:在编辑器中实时显示所编辑的网页,以便用户实时查看修改结果。
实现HTML可视化编辑器的关键是通过代码解析器将用户输
入的HTML代码转化为可视化的组件和属性,同时将对组件
和属性的修改实时反映在预览窗口中。
编辑器还需要提供一些辅助功能,如撤销/重做、保存和导出等。
总之,HTML可视化编辑器通过将HTML代码转化为可视化
的组件和属性,提供了直观、易用的方式来创建和编辑网页结构和样式。
它大大简化了网页设计和开发过程,使非专业人士也能够轻松创建出各种复杂的网页。
EXTJS框架-入门实例
EXTJS框架-⼊门实例extjs框架是⼀个JavaScript框架,可以渲染出丰富的控件实例:代码:<html><head><title>test</title><link type="text/css" rel="Stylesheet" href="css/ext-all.css"/><!--<link rel="stylesheet" type="text/css" href="css/ux-all.css" /><link rel="stylesheet" type="text/css" href="css/yourtheme.css" />--><script src="js/ext-base.js" type="text/javascript"></script><script src="js/ext-all.js" type="text/javascript"></script><!--<script type ="text/javascript" src="js/ux-all.js"></script>提⽰框<script type ="text/javascript" src="js/App.js"></script>--></head><body><div style="border:4px dashed #ccc;margin:50px 50px;padding:50px 50px;">输⼊框<input id="text" /><br/>表格<div id="grid" style="height:200px;"></div><br/>表单<div id="form" style="height:120px;"></div>表单组件<div id="formGroup" ></div></div><script type="text/javascript">Ext.onReady(function () {//提⽰框//Ext.Msg.alert('<span style="color:red;">tip</span>','这个是EXTJS的demo,初始化加载⽅法都应该<span style="color:red;">写在Ext.onReady⾥⾯</span>'); //事件绑定Ext.get('text').on('keypress',enterEvent);//表格gridControl();//表单formControl();//表单组件formGroupControl();});///回车事件function enterEvent(e){if(e.charCode==Ext.EventObject.ENTER){console.log(Ext.get('text').dom.value);Ext.Msg.alert('info','hello,'+Ext.get('text').dom.value);}}//表格控件function gridControl(){//⾏号var rn=new Ext.grid.RowNumberer();//列var cm=new Ext.grid.ColumnModel([rn,{header:'编号',dataIndex:'id'},{header:'名称',dataIndex:'name',renderer:function(value){return '<span style="color:red;" onclick="e_alert(\''+value+'\')">名称是'+value+'</span>'; }},{header:'描述',dataIndex:'desc'},{header:'备注',dataIndex:'remark'}]);//数据var data=[['id','name','desc','remark'],['2','name','desc','remark'],['3','name','desc','remark'],['4','name','desc','remark'],['5','name','desc','remark'],['7','name','desc','remark'],['8','name','desc','remark'],['1','2','3','4']];var store=new Ext.data.Store({proxy:new Ext.data.MemoryProxy(data),//proxy:new Ext.data.ScriptTagProxy({url:'/data.json'}),reader:new Ext.data.ArrayReader({},[{name:'id',mapping:0},{name:'name',mapping:1},{name:'desc'},{name:'remark'}])});//⾯板var grid=new Ext.grid.GridPanel({renderTo:'grid',height:200,store:store,loadMask:true,cm:cm,viewConfig:{forceFit:true}});//加载数据store.load();}function e_alert(value){Ext.Msg.alert('info',value);}//表单function formControl(){var form=new Ext.form.FormPanel({defaultType:'textfield',labelAlign:'right',title:'form',frame:true,labelWidth:50,buttonAlign:'center',width:220,items:[{fieldLabel:'⽂本框'}],buttons:[{text:'按钮'}]});form.render('form');}//表单组件function formGroupControl(){Ext.QuickTips.init();var formGroup=new Ext.form.FormPanel({title:'form',frame:true,labelWidth:50,width:600,labelAlign:'right',buttonAlign:'center',items:[{layout:'column',items:[{title:'单纯输⼊',xtype:'fieldset',checkboxToggle:true,autoHeight:true,columnWidth:0.7,defaults:{width:300},items:[{fieldLabel:'⽂本',xtype:'textfield',name:'text'},{fieldLabel:'数字',xtype:'numberfield',name:'number'},{fieldLabel:'选择',xtype:'combo',name:'combo',store:new Ext.data.SimpleStore({ fields:['value','text'],data:[['1','2'],['aa','bb'],['aa2','bb2'],['aa3','bb3'],['hello','你好'],]}),valueField:'value',displayField:'text',mode:'local',emptyText:'请选择'},{fieldLabel:'⽇期',xtype:'datefield',name:'date'},{fieldLabel:'时间',xtype:'timefield',name:'time'},{fieldLabel:'多⾏',xtype:'textarea',name:'textarea'},]},{title:'多选',xtype:'fieldset',checkboxToggle:true,hideLabels:true,style:'margin-left:10px;',columnWidth:0.3,defaultType:'checkbox',items:[{boxLabel:'⾸先要吃饱',name:'check',value:'1',width:'auto'},{boxLabel:'然后也要吃饱',name:'check',value:'2',checked:false,width:'auto'},{boxLabel:'接着还是要吃饱',name:'check',value:'3',checked:true,width:'auto'},{boxLabel:'最后也要吃饱',name:'check',value:'4',checked:false,width:'auto'},]},{title:'单选',xtype:'fieldset',checkboxToggle:true,defaultType:'radio',style:'margin-left:10px;',columnWidth:0.3,hideLabels:true,autoHeight:true,items:[{boxLabel:'渴望⾃由',name:'rad',value:'1',checked:true,width:'auto'},{boxLabel:'祈求爱情',name:'rad',value:'2',width:'auto'}]}]},{layout:'form',labelAlign:'top',items:[{xtype:'htmleditor',fieldLabel:'在线编辑器',id:'editor',anchor:'98%'}]}],buttons:[{text:'保存'},{text:'读取'},{text:'取消'},]});formGroup.render('formGroup'); }</script></body></html>。
html用什么软件编写
HTML用什么软件编写HTML(超文本标记语言)是用于创建网页的标准标记语言。
对于编写和编辑HTML文件,有许多不同的软件可用。
这些软件提供了各种功能,从简单的文本编辑器到具有高级功能和图形用户界面的集成开发环境(IDE)。
在本文中,我们将介绍一些常用的HTML编辑软件,并讨论它们的优点和缺点。
1. 文本编辑器1.1 Windows自带的记事本/NotepadWindows操作系统自带的记事本(Notepad)是一个简单的文本编辑器,适合编写HTML代码。
然而,记事本没有提供任何代码自动完成、语法高亮等功能,因此在编辑大型HTML文件时可能不太方便。
1.2 Visual Studio CodeVisual Studio Code(简称VS Code)是一款免费的开源代码编辑器,由微软开发。
它支持各种编程语言,包括HTML。
VS Code提供了丰富的功能,如语法高亮、代码折叠、智能代码提示等,使得编写和编辑HTML文件更加方便快捷。
2. 集成开发环境(IDE)2.1 Adobe DreamweaverAdobe Dreamweaver是一款功能强大的集成开发环境,专为网页设计和开发而设计。
它提供了可视化设计工具和代码编辑器,使得编写和编辑HTML文件变得更加直观和高效。
Dreamweaver还集成了许多有用的功能,如代码提示、调试工具、图形用户界面等。
2.2 Sublime TextSublime Text是一款流行的文本编辑器,被广泛用于编写各种编程语言,包括HTML。
它具有丰富的功能和插件生态系统,使得编写和编辑HTML文件非常灵活和可定制。
Sublime Text具有快速启动速度和响应,是许多开发者的首选工具。
2.3 WebStormWebStorm是由JetBrains开发的一款专业的JavaScript集成开发环境。
它具有强大的HTML编辑功能,包括代码自动完成、语法检查、调试工具等。
WebStorm 对HTML、CSS和JavaScript之间的关联非常敏感,使得开发和调试网页应用非常方便。
extjs中文说明
EXT 中文手册开发必备该文档内容取自互联网,详细的介绍了EXT的各部分内容,希望对大家有所帮助pjq2008-5-25EXT 中文手册EXT 中文手册pjq 收集整理22008EXT 中文手册前言本手册所有内容均粘贴自互联网,如有错误,请多见谅。
EXT 中文手册EXT 中文手册pjq 收集整理32008目录EXT 中文手册 (1)EXT 简介 (5)目目錄錄 (5)下载Ext (6)开始! (6)Element:Ext 的核心 (6)获取多个DOM 的节点 (7)响应事件 (7)使用Widgets (9)使用Ajax (11)EXT 源码概述 (13)揭示源代码 (13)发布Ext 源码时的一些细节 (14)我应该从哪里开始? (15)适配器Adapters (15)核心Core (15)Javascript 中的作用域(scope) (15)事前准备 (15)定义 (15)正式开始 (16)window 对象 (16)理解作用域 (17)变量的可见度 (17)EXT 程序规划入门 (18)事前准备 (18)需要些什么? (18)applayout.html (18)applayout.js (19)公开Public、私有Private、特权的Privileged? (21)重写公共变量 (23)重写(Overriding)公共函数 (23)DomQuery 基础 (24)DomQuery 基础 (24)扩展EXT 组件 (31)文件的创建 (31)Let's go (35)完成 (37)EXT 的布局(Layout) (39)简单的例子 (40)加入内容 (43)开始使用Grid (53)EXT 中文手册EXT 中文手册pjq 收集整理42008步骤一定义数据(Data Definition) (53)步骤二列模型(Column Model) (54)Grid 组件的简易分页 (55)d G rid 数据 (55)的怎么做一个分页的d Gr id (56)栏分页栏r T ool ba r (56)EXT Menu 组件 (57)创建简易菜单 (57)种各种m Item 的类型 (59)m I tem 属性 (59)在在I UI 中摆放菜单 (59)u M enu 的分配方式: (60)练一练 (62)到动态添加菜单按钮到r Too lb ar (62)更方便的是 (63)下一步是 (63)模板(Templates)起步 (63)第一步您的HTML 模板 (63)第二步,将数据加入到模板中 (64)下一步 (64)学习利用模板(Templates)的格式化功能 (64)正式开始 (64)下一步 (66)事件处理 (66)非常基础的例子 (66)处理函数的作用域 (66)传递参数 (67)类设计 (67)对象创建 (67)使用构造器函数 (68)方法共享 (68)表单组件入门 (69)表单体 (69)创建表单字段 (69)完成表单 (70)下一步 (71)为一个表单填充或提交数据 (71)让我们开始吧 (71)读取我们的数据 (72)EXT 中的继承 (73)补充资料 (74)Ext 2 概述 (74)组件模型Component Model (76)容器模型Container Model (80)EXT 中文手册EXT 中文手册pjq 收集整理52008布局Layouts (81)Grid (84)XTemplate (84)DataView (85)其它新组件 (85)EXT2 简介 (86)下载Ext (86)开始! (87)Element:Ext 的核心 (87)获取多个DOM 的节点 (88)响应事件 (88)使用Widgets (90)編輯使用Ajax (93)TabPanel 基础 (96)Step 1: 创建HTML 骨架 (96)Step 2: Ext 结构的构建 (97)Step 3: 创建Tab 控制逻辑 (99)EXT 简介无论你是Ext 库的新手,抑或是想了解Ext 的人,本篇文章的内容都适合你。
ext基础
ExtJS引用 ExtJS引用
到官方网站 /products/extjs/download.php下载必要 的核心包; 解压ext-4.0.7-gpl.zip; 在Html中引入相应文件。 <!—引入ExtJs的样式文件--> <link type="text/css" rel="Stylesheet" href="extjs/res ources/css/ext-all.css" /> <!—引入ExtJs的框架文件--> <script type=“text/javascript” src=“extjs/extall.js”></script>
表单与元素组件
radio Ext.form.field.Radio 单选按钮 textarea Ext.form.field.TextArea 区域文本 框 Text Ext.form. Field.Text 表单文本框 time Ext.form. field.Time时间录入项 trigger Ext.form.field.Trigger 触发录入项 在这些组件中最常用的组件有: grid、panel、treepanel、 form、 window等等
allowBlank: false },{ fieldLabel: 'Last Name', name: 'last', allowBlank: false }], buttons: [{ text: 'Reset', handler: function() { this.up('form').getForm().reset(); } }, { text: 'Submit',
extjs Editor Grids 可编辑的表格
Editor Grids(可编辑表格)在之前的一章中我们学习了如何在结构化的表格中显示用户可操作的数据。
但是,这种表格有一个最大的限制,那就是用户无法自己编辑表格中的数据。
幸运的是,Ext提供了EditorGridPanel这一控件,它支持用户对表格进行编辑——我们现在就对这一控件进行学习。
它的工作形式类似于Excel,允许用户在点击单元格后进行数据的编辑操作。
在这章里,我们将会学到:∙为用户提供连接到data store的可编辑表格;∙把编辑后的数据发给服务器,允许用户通过ExtJS的editor grid更新服务器端的数据;∙通过编码操控grid并对事件做出相应;∙教给你一些高级的格式化小窍门并且让您建立更加强大的editor grid。
但是,首先,我们要看看可以用可编辑表格能够做什么事情。
我们能用可编辑表格做什么?EditorGridPanel和我们之前使用到的表单(form)很相似。
实际上,editor gird 使用了和form中完全一样的表单字段。
通过使用表单字段来实现对grid单元格进行编辑,我们可以充分利用表单字段提供的同样的功能。
包括输入约束以及数值验证等。
把它和Ext的GridPanel联合起来,就造就了可以满足我们任何需求的漂亮的控件。
这个表格中的所有字段都可以被编辑,如同使用表格字段中的text field(文本字段)、date picker(日期选择器)、combo box(组合框/下拉菜单)一般。
使用可编辑的表格:可编辑和不可编辑表格的区别十一个相当简单的开始的过程。
复杂的使我们需要处理编辑状态然后传回服务器。
但是一旦你学会了如何去做,这部分也就同样变得相当的简单。
让我们先看看如何把第五章开头部分的表格升级到可以编辑电影标题(title)、导演(director)、和标语(tagline)。
修改后的代码如下所示:var title_edit = new Ext.form.TextField();var director_edit = new Ext.form.TextField({vtype: 'name'});var tagline_edit = new Ext.form.TextField({maxLength: 45});var grid = new Ext.grid.EditorGridPanel({renderTo: document.body,frame:true,title: 'Movie Database',height:200,width:520,clickstoEdit: 1,store: store,columns: [{header: "Title", dataIndex: 'title',editor: title_edit},{header: "Director", dataIndex: 'director',editor: director_edit},{header: "Released", dataIndex: 'released',renderer:Ext.util.Format.dateRenderer('m/d/Y')},{header: "Genre", dataIndex: 'genre',renderer: genre_name},{header: "Tagline", dataIndex: 'tagline',editor: tagline_edit}]});为了让grid可编辑,我们需要做四件事情。
extjs中利用htmleditor与第三方打印插件Lodop结合使用WEB打印功能
extjs中利用htmleditor与第三方打印插件Lodop结合使用WEB打印功能(完整代码版)在之前,针对第三方打印插j件Lodop在extjs中如何使用进行了简单测试,发现是可行的。
在这次项目中,考虑实际使用需要,需要针对html格式内容进行编辑打印,笔者经过测试,发现使用起来也是相当简单和方便的。
图1 需要打印的报表数据图2 lodop控件的打印预览界面笔者在之前,考虑用户通过系统自动生产html报表,在通过panel的autoload方法获取html报表数据,但存在的问题是,该html报表无法进行更改,为此,改为将html数据放置在htmleditor中,这样用户就可以修改报表数据了,在需要打印时,将htmleditor控件中的html报表数据,插入至打印div中即可。
1:定义打印div,并设置成隐藏模式<div id='PRN_OutReport' class="x-hide-display"></div>2:定义htmleditor,并获取html报表数据var Printreport_panel =new Ext.form.FormPanel({frame: false,border:false,preventBodyReset: false,height: 400,layout:'fit',items:[{border:false,xtype:'htmleditor',name:'Conten',fontFamilies : ['宋体','黑体','隶书','Arial','Courier New','Tahoma','Times New Roman','Verdana'],defaultFont: '宋体'}],autoScroll: true });3:获取html报表数据项目是通过点击获取数据按钮,从服务器端返回表格数据,代码如下(界面如图一):var S_PrintView = new Ext.form.FormPanel({labelAlign: 'right',frame: false,border: false,buttonAlign: 'center',items: [{layout: 'column',items: [{columnWidth: 0.45,layout: 'form',defaultType: 'textfield',items: [{anchor: '90%',name: 'P_Date',fieldLabel: F_ProDate},{anchor: '90%',name: 'P_guestName',fieldLabel: F_GuestText}]},{columnWidth: 0.45,layout: 'form',defaultType: 'textfield',items: [{anchor: '90%',name: 'P_OutNum',fieldLabel: F_OutNum},{anchor: '90%',name: 'P_SNum',fieldLabel: F_FileNum}]},{columnWidth: 0.1,layout: 'fit',items: [{xtype: 'button',height: 50,text: B_GetPrintData,handler: function() {Ext.Ajax.request({url: Appdns + 'Action/Print_Class_Get.asp?action=Print_OutCheckReport',params: {P_Date: S_PrintView.getForm().findField('P_Date').getValue(),P_guestName: S_PrintView.getForm().findField('P_guestName').getValue(),P_OutNum: S_PrintView.getForm().findField('P_OutNum').getValue(),P_SNum: S_PrintView.getForm().findField('P_SNum').getValue(),InProId: InProId},success:function (response){Printreport_panel.getForm().findField('Conten').setValue(response.responseText); //向htmleditor 控件中插入表格数据},failure:function (response){Ext.Msg.alert(S_Action, Server_Error_Text)}})}}]}]}]})LODOP控件配置function _Outprint_View(InProId) {var Print_Report_Button = new Ext.Button({text: W_PrintPreview,iconCls:'icon_preview',height: 30,handler: function(){var _ss=Printreport_panel.getForm().findField('Conten').getValue();Ext.get("PRN_OutReport").dom.innerHTML=_ss;if (CheckIsInstall()){LODOP=getLodop(document.getElementById('LODOP_OB'),document.getElementById('LODO P_EM'));LODOP.PRINT_INIT(W_PrintOutCheckReport);LODOP.SET_PRINT_STYLE("FontSize",12);LODOP.SET_PRINT_STYLE("Bold",1);LODOP.ADD_PRINT_HTM("5mm","15mm",960,800,document.getElementById("PRN_OutRep ort").innerHTML);//" PRN_OutReport "定义的打印divLODOP.ADD_PRINT_IMAGE("5mm","15mm",120,40,"<img src='images/chzm.jpg' width='101' height='35'>");LODOP.SET_PRINT_PAGESIZE (2, 0, 0,"A4");LODOP.SET_SHOW_MODE('LANDSCAPE_DEFROTATED',1);LODOP.SET_SHOW_MODE('HIDE_PAPER_BOARD',1);LODOP.SET_SHOW_MODE('SHOW_SCALEBAR',1);LODOP.SET_SHOW_MODE('PREVIEW_NO_MINIMIZE',1);LODOP.PREVIEW();}else{Ext.MessageBox.alert(S_Action,S_PrintOcxSetupError);}}});var Printreport_panel =new Ext.form.FormPanel({frame: false,border:false,preventBodyReset: false,height: 400,layout:'fit',items:[{border:false,xtype:'htmleditor',name:'Conten',fontFamilies : ['宋体','黑体','隶书','Arial','Courier New','Tahoma','Times New Roman','Verdana'],defaultFont: '宋体'}],autoScroll: true});var S_PrintView = new Ext.form.FormPanel({ labelAlign: 'right',frame: false,border: false,buttonAlign: 'center',items: [{layout: 'column',items: [{columnWidth: 0.45,layout: 'form',defaultType: 'textfield',items: [{anchor: '90%',name: 'P_Date',fieldLabel: F_ProDate},{anchor: '90%',name: 'P_guestName',fieldLabel: F_GuestText}]},{columnWidth: 0.45,layout: 'form',defaultType: 'textfield',items: [{anchor: '90%',name: 'P_OutNum',fieldLabel: F_OutNum},{anchor: '90%',name: 'P_SNum',fieldLabel: F_FileNum}]},{columnWidth: 0.1,layout: 'fit',items: [{xtype: 'button',height: 50,text: B_GetPrintData,handler: function() {Ext.Ajax.request({url: Appdns + 'Action/Print_Class_Get.asp?action=Print_OutCheckReport', params: {P_Date: S_PrintView.getForm().findField('P_Date').getValue(),P_guestName: S_PrintView.getForm().findField('P_guestName').getValue(),P_OutNum: S_PrintView.getForm().findField('P_OutNum').getValue(),P_SNum: S_PrintView.getForm().findField('P_SNum').getValue(),InProId: InProId},success:function (response){Printreport_panel.getForm().findField('Conten').setValue(response.responseText);},failure:function (response){Ext.Msg.alert(S_Action, Server_Error_Text)}})}}]}]}]})var PrintWz_View = new Ext.Window({title: W_OutPrintCheckReport,width: 900,height: 550,frame: true,layout:'border',modal: true,items:[{region:'north',height:80,layout:'fit',style:'padding:5 5 0 5;',frame:true,border:true,items:[S_PrintView]},{region:'center',layout:'fit',style:'padding:5 5 5 5;',frame:false,border:false,items:[Printreport_panel]}],closeAction: 'close',buttonAlign:'center',buttons: [Print_Report_Button, {text: B_Exit,height: 30,iconCls:'icon_exit',handler: function() {PrintWz_View.close();}}]});PrintWz_View.show()}4:服务器端数据返回代码,asp编程'说明:表格数据从检测项目中动态生成'P_Date=request("P_Date")P_guestName=request("P_guestName")P_OutNum=request("P_OutNum")P_SNum=request("P_SNum")InProId = request("InProId")'表格标题response.Write "<div style='text-align: center;'><span style='font-size: 18px; text-align:center;'>XXXXX有限公司</span></div>"response.Write "<div style='text-align: center;'><span style='font-size: 18px; text-align: center;'>检查报告</span></div>"response.Write"<style type='text/css'>"response.Write" .table-c table{border-right:1px solid #000;border-bottom:1px solid#000;word-break:break-all; word-wrap:break-all;font:宋体;font-size:12px}"response.Write" .table-c table td{height:28px;border-left:1px solid #000;border-top:1px solid#000;font:宋体;font-size:12px}"response.Write" .style1 {text-align: center;font:宋体;font-size:18px;color:#000}</style>"If Len(InProId) <>0 ThenSql = "selectInProData.Rkcode,InProData.FaCode,FacCode.FaDetail,InProData.InDate,InProData.In_Wdate,I nProData.Wz_Code,WzCode.Wz_Text,InProData.WzInNum,InProData.WZ_TestReportNumfrom (InProData left join FacCode on FacCode.FaCode=InProData.FaCode) left join WzCode on WzCode.Wz_Code=InProData.Wz_Code where InProData.InProId="&InProIdSet rs = server.CreateObject("adodb.recordset")rs.Open sql, conn, 1, 1If rs.recordcount<>0 Thenresponse.Write"<div style='text-align: left;'><span style='font-size: 12px; text-align: center;'>编号:"&P_SNum&"</span></div>"表格正文部分response.Write"<div class='table-c'>"response.Write"<table style='width: 960px' border=0 cellspacing=0 cellpadding=0>"response.Write"<tr>"response.Write"<td colspan='2' style='width: 170px'>物料名称</td>"response.Write"<td style='width: 200px'> </td>"response.Write"<td style='width: 80px'>规格型号</td>"response.Write"<td style='width: 350px'>"&rs("Wz_Text")&"</td>"response.Write"<td style='width: 80px'>物料代码</td>"response.Write"<td style='width: 80px'>"&rs("Wz_Code")&"</td>"response.Write"</tr>"response.Write"<tr>"response.Write"<td colspan='2' style='width: 170px'>生产日期</td>" response.Write"<td style='width: 200px'>"&P_Date&"</td>"response.Write"<td style='width: 80px'>检验日期</td>"response.Write"<td style='width: 350px'>"&rs("In_Wdate")&"</td>" response.Write"<td style='width: 80px'>出货数量</td>"response.Write"<td style='width: 80px'>"&P_OutNum&"</td>"response.Write"</tr>"response.Write"<tr>"response.Write"<td colspan='2' style='width: 170px'>客户</td>"response.Write"<td colspan='5' >"&P_guestName&"</td>"response.Write"</tr>"response.Write"<tr>"response.Write"<td colspan='7' class='style1' style='width: 960px'>检验记录</td>"response.Write"</tr>"response.Write"<tr>"response.Write"<td rowspan='2' style='width: 80px' class='style1'>分类</td>" response.Write"<td rowspan='2' style='width: 90px' class='style1'>检验项目</td>" response.Write"<td rowspan='2' style='width: 200px' class='style1'>规格值</td>" response.Write"<td colspan='4' style='width: 590px' class='style1'>测试数据</td>"response.Write"</tr>"response.Write"<tr>"response.Write"<td style='width: 80px' >抽样数</td>"response.Write"<td style='width: 350px'>检测值</td>"response.Write"<td style='width: 80px'>结论</td>"response.Write"<td style='width: 80px'>备注</td>"response.Write"</tr>"Wz_Code = rs("Wz_Code")rs.Close()Sql = "SelectInProId,Wz_CheckItemId,Wz_CheckId,Wz_CheckSimpleNum,Wz_CheckItemValue,Wz_CheckI temMinValue,Wz_CheckItemMaxValue,Wz_CheckItemAvgValue,Wz_CheckItemDevValue,Wz_ CheckItemNGSimpleNum,Wz_CheckItemresult,Wz_CheckMemo from WzCheckResult where InProId="&InProIdrs.Open sql, conn, 1, 1If rs.recordcount<>0 ThenSql1=""Elsesql1=" and Wzcheckitem.N_Pro_Action=1"End Ifrs.Close()Sql = "select WzCheckItem.CheckCode,WzCheckType.CheckType,count(*) as ItemsNum from WzCheckItem left join WzCheckType on WzCheckType.CheckCode=WzCheckItem.CheckCode where WzCheckItem.Wz_Code='"&Wz_Code&"'"&sql1&" group byWzCheckItem.CheckCode,WzCheckType.CheckType order by WzCheckItem.CheckCode asc"rs.Open sql, conn, 1, 1If rs.recordcount = 0 Thenrs.Close()ElseRows = rs.recordcountReDim preserve CheckItemNum(Rows, 3)i = 0Do While Not Rs.EOFCheckItemNum(i, 0) = Rs("CheckCode")CheckItemNum(i, 1) = rs("CheckType")CheckItemNum(i, 2) = rs("ItemsNum")Rs.MoveNext()i = i + 1Looprs.Close()Sql = "selectCheckCode,Wz_CheckItemId,N_Pro_TestItem,N_Pro_TestValue,N_Pro_ValueMin,N_Pro_Value Max,N_Pro_TestType,N_Pro_SortType from Wzcheckitem whereWz_Code='"&Wz_Code&"'"&sql1&" Order by CheckCode asc,N_Pro_SortType asc"rs.Open sql, conn, 1, 1If rs.recordcount<>0 ThenRows = rs.recordcountReDim preserve CheckItemsResult(Rows, 9)i = 0Do While Not Rs.EOFCheckItemsResult(i, 0) = rs("CheckCode")CheckItemsResult(i, 1) = rs("Wz_CheckItemId")CheckItemsResult(i, 2) = rs("N_Pro_TestItem")If CInt(rs("N_Pro_TestType")) = 1 Then '数值字型内容CheckItemsResult(i, 3) =rs("N_Pro_TestValue")&"<br>【下限值:"&rs("N_Pro_V alueMin")&" 上限值:"&rs("N_Pro_ValueMax")&"】"ElseCheckItemsResult(i, 3) = rs("N_Pro_TestValue")End IfRs.MoveNext()i = i + 1LoopEnd Ifrs.Close()Sql = "SelectInProId,Wz_CheckItemId,Wz_CheckSimpleNum,Wz_CheckItemValue,Wz_CheckItemresult,Wz _CheckMemo from WzCheckResult where InProId="&InProIdrs.Open sql, conn, 1, 1If rs.recordcount<>0 Theni = 0Do While Not Rs.EOFFor k = 0 To UBound(CheckItemsResult) -1If Int(rs.fields(1).Value) = Int(CheckItemsResult(k, 1)) ThenFor j = 2 To rs.fields.Count -1If Trim(rs.fields(j).Name) = "Wz_CheckItemValue" ThenCheckItemsResult(k, j + 2) = Replace(rs.fields(j).Value, ","," ")ElseIf Trim(rs.fields(j).Name) = "Wz_CheckItemresult" ThenSelect Case CInt(Trim(rs.fields(j).Value))Case 0:CheckItemsResult(k, j + 2) = "不合格"Case 1:CheckItemsResult(k, j + 2) = "合格"Case 2:CheckItemsResult(k, j + 2) = "参考测试"End SelectElseCheckItemsResult(k, j + 2) = rs.fields(j).Value '取测试值End IfEnd IfNextElseEnd IfNextRs.MoveNext()i = i + 1Looprs.Close()Elsers.Close()End IfTotalRows = 0For j = 0 To UBound(CheckItemsResult, 1) -1response.Write"<tr>"If j = TotalRows ThenFor m = 0 To UBound(CheckItemNum, 1) -1If CheckItemsResult(j, 0) = CheckItemNum(m, 0) Thenresponse.Write "<td rowspan="&CheckItemNum(m, 2)&">"&CheckItemNum(m, 1)&"</td>" TotalRows = TotalRows + CheckItemNum(m, 2)End IfNextEnd IfFor n = 2 To UBound(CheckItemsResult, 2) -2If n = UBound(CheckItemsResult, 2) -2 Thenresponse.Write "<td >"If Len(Trim(CheckItemsResult(j, n))) = 0 Thenresponse.Write " "Elseresponse.Write CheckItemsResult(j, n)End Ifresponse.Write "</td>"Elseresponse.Write "<td>"If Len(Trim(CheckItemsResult(j, n))) = 0 Thenresponse.Write " "Elseresponse.Write CheckItemsResult(j, n)End Ifresponse.Write "</td>"End IfNextresponse.Write "</tr>"NextEnd Ifresponse.Write"<tr>"response.Write"<td colspan='7' >本批检验结论:合格□ 不合格□</td>"response.Write"</tr>"response.Write "</table></div>"response.Write"<table style='width: 960' border=0 cellspacing=0 cellpadding=0>" response.Write "<tr>"response.Write"<td height=30px>主管:</td>"response.Write"<td >审核:</td>"response.Write"<td >拟制:</td>"response.Write"</tr></table></div>"Elsers.Close()End IfEnd IfSet Rs = Nothing。
Extjs4分享手册
Extjs布局
Extjs布局分为容器布局和组件布局两大类。 容器布局:
组件布局:Dock、Tool、Field、TriggerField
容器布局
一、Auto layout 说明:组件在容器中原样排列
二、Anchor layout 说明:组件通过anchor属性,out 说明:继承自Anchor布局,可以同通过x、y 属性设置组件同容器左上角的距离。
如下页面:
获取id为text1的html控件:Ext.getDom(“text1”) 获取第一个input控件:Ext.query("input")[0] 获取id为text2的ext元素:Ext.get(“text2”) 获取id为textfield1的ext元素:Ext.get("textfield1") 获取id为textfield2的ext组件:Ext.getCmp(“textfield2”) 获取第一个textfield组件:ponentQuery.query(“textfield”)*0+ 获取textfiled1相邻的textfield2:Ext.getCmp("textfield1").next("textfield") 获取textfieldchild1的父panel:Ext.getCmp(“textfieldchild1”).up(“panel”) 获取panel下面的第一个textfield组件: ponentQuery.query("panel[title=Extjs控件]")[0].down("textfield")
Chapter:
Ext.define ('Chapter', { extend: 'Ext.data.Model', fields: [ {name: 'id', type: 'int'}, {name: 'number', type: 'int'}, {name: 'title', type: 'string'}, {name: 'bookId', type: 'int'} ] }); 说明:hasMany有以下的配置项 model :关联对象的model名称 name::关联的模型别名,用来获取关联对象数据,如果没有,默认为model名称加上“s” primaryKey :主键,主对象用于关联的属性名称,默认为id foreignKey:外键,关联对象用于关联的属性名称,默认为关联对象model名称加上“_id” filterProperty :过滤数据,只需要指定数据关联
ewebeditor
ewebeditor简介ewebeditor是一款基于Web的富文本编辑器,是一种用于在Web页面上编辑和格式化文本的工具。
它具有简单易用、功能强大的特点,可以用于各种Web开发项目中。
特性1. 简单易用ewebeditor提供简单直观的操作界面,用户可以轻松地进行文本编辑、插入图片、调整格式等操作。
无需编写复杂的HTML代码,即可实现对文本的灵活控制。
2. 功能强大ewebeditor具有丰富的功能,包括格式化文本、插入图片、超链接、插入表格等。
用户可以根据需要自由调整文本样式和布局,满足不同的编辑需求。
3. 代码高亮ewebeditor支持代码高亮显示,可以方便地编辑和展示代码片段。
用户可以选择不同的编程语言,使代码在编辑器中显示更加清晰明了。
4. 扩展性强ewebeditor支持插件机制,用户可以根据自己的需求扩展编辑器的功能。
通过自定义插件,可以实现更多的功能,提高编辑器的灵活性和可定制性。
优势1. 跨平台作为基于Web的编辑器,ewebeditor可以在各种操作系统和设备上使用。
无论是在Windows、Mac还是Linux上,用户都可以方便地使用ewebeditor进行文本编辑。
2. 实时预览ewebeditor具有实时预览功能,用户可以即时查看编辑效果。
在编辑文本的同时,可以随时预览文本的显示效果,提高编辑效率。
3. 兼容性好ewebeditor对各种浏览器具有良好的兼容性,可以在主流的浏览器中正常运行。
无论是Chrome、Firefox还是Safari,用户都可以平稳地使用ewebeditor进行文本编辑。
4. 自动保存ewebeditor具有自动保存功能,可以在编辑过程中自动保存文本内容。
即使在意外断网或关闭浏览器的情况下,用户也不用担心数据丢失问题。
使用示例```html <!DOCTYPE html><link rel=。
EXT_JS入门详解
EXT_JS入门详解第二章、开始ExtJS2.1获得ExtJSadapter:负责将里面提供第三方底层库(包括Ext 自带的底层库)映射为Ext 所支持的底层库。
build:压缩后的ext 全部源码(里面分类存放)。
docs: API 帮助文档。
exmaples:提供使用ExtJs 技术做出的小实例。
resources:Ext UI 资源文件目录,如CSS、图片文件都存放在这里面。
source:无压缩Ext 全部的源码(里面分类存放) 遵从Lesser GNU (LGPL)开源的协议。
Ext-all.js:压缩后的Ext 全部源码。
ext-all-debug.js:无压缩的Ext 全部的源码(用于调试)。
ext-core.js:压缩后的Ext 的核心组件,包括sources/core 下的所有类。
ext-core-debug.js:无压缩Ext 的核心组件,包括sources/core 下的所有类。
2.2应用ExtJS应用extjs 需要在页面中引入extjs 的样式及extjs 库文件,样式文件为resources/css/extall.css,extjs 的js 库文件主要包含两个,adapter/ext/ext-base.js 及ext-all.js,其中ext-base.js表示框架基础库,ext-all.js 是extjs 的核心库。
adapter 表示适配器,也就是说可以有多种适配器,因此,可以把adapter/ext/ext-base.js 换成adapter/jquery/ext-jquery-adapter.js ,或adapter/prototype/ext-prototype-adapter.js 等。
因此,要使用ExtJS 框架的页面中一般包括下面几句:在ExtJS 库文件及页面内容加载完后,ExtJS 会执行Ext.onReady 中指定的函数,因此可以用,一般情况下每一个用户的ExtJS 应用都是从Ext.onReady 开始的,第三章Ext框架基础及核心简介3.1Ext类库简介ExtJS 由一系列的类库组成,一旦页面成功加载了ExtJS 库后,我们就可以在页面中通过javascript 调用ExtJS 的类及控件来实现需要的功能。
ExtJs教程,一个示例带你学会所有表单控件
一个例子带你学完EXTJS form表单所有控件在开始之前,还是简单说说ext需要引入的包,ext有两个包是必引的,ext-all.js、ext-all.css,我用的ExtJs 4.2。
配置方式如下:<link rel="stylesheet"type="text/css" href="../resources/css/ext-all.css"/><script type="text/javascript"src="../js/ext-all.js">注意里面的路径,我这里写的是相对路径,你们配置的时候自己注意。
Form表单效果如下:JS代码如下:<script type="text/javascript">//完整的form表单Ext.onReady(function () {//HTMLeditor需要这个,初始化编辑器Ext.QuickTips.init();var form = new Ext.form.FormPanel({ //创建一个FormPanelbuttonAlign:'center', //按键居中pageX:300, //距离页面左边距300pxpageY:80, //距离页面上边距80pxwidth:600, //FormPanel宽600title:'个人信息', //FormPanel标题frame:true, //对Ext的Panel界面组件,如果配置它的frame为true,则Panel是圆角框显示,并且增加paddingfieldDefaults:{labelAlign:'right', //标签靠右排列labelWidth:70},items:[{xtype:'container', //类型为容器layout:'column', //列布局,只能纵向items:[{columnWidth:0.7, //宽占比:70%xtype:'fieldset', //类型html中framesetcheckboxToggle:true, //true-使fieldSet可折叠title:'单纯输入',autoHeight:true, //自动调节高度defaults:{width:300},defaultType:'textfield',items:[{fieldLabel:'文本', //文本名称name:'text'//类型为文本输入控件},{xtype:'numberfield', //类型为数字输入控件,带校验功能fieldLabel:'数字', //文本名称name:'number'},{xtype:'combo', //多选fieldLabel:'选择',name:'combo',store:new Ext.data.SimpleStore({fields:['value','text'], //类似key-valuedata:[['haha','hehe'],['xixi','wuwu']] //创建静态数据}),displayField:'text',valueField:'value',mode:'local', //读取本地数据emptyText:'请选择'//若为空则显示},{xtype:'datafield', //日期控件fieldLabel:'日期',name:'data',},{xtype:'timefield', //时间控件fieldLabel:'时间',name:'time'},{xtype:'textarea', //文本域控件fieldLabel:'文本域',name:'textarea'},{xtype:'hidden', //隐藏控件name:'hidden'}]},{xtype:'container',columnWidth:0.3,layout:'form', //表单布局items:[{xtype:'fieldset',checkboxToggle:true, //true-使fieldSet 可折叠title:'多选',autoHeight:true,defaultType:'checkbox', //多选控件hideLabels:true, //是否隐藏字段标签style:'margin-left:10px;',bodyStyle:'margin-left:20px;',items:[{boxLabel:'吃饭',name:'check',value:'1',checked:'true',width:'auto'},{boxLabel:'睡觉',name:'check',value:'2',checked:'true',width:'auto'},{boxLabel:'打豆豆',name:'check',value:'3',width:'auto'}]},{xtype:'fieldset',checkboxToggle:true,title:'单选',autoHeight:true, //自动调节高度defaultType:'radio', //单选控件hideLabels:true,style:'margin-left:10px;',bodyStyle:'margin-left:20px;',items:[{boxLabel:'单机',name:'single',value:'1',checked:true,width:'auto'},{boxLabel:'联网',name:'single',value:'2',width:'auto'}]}]}]},{xtype:'container',layout:'form',items:[{labelAlign:'top', //顶部对其xtype:'htmleditor', //编辑器控件fieldLabel:'在线编辑器',id:'editor',anchor:'98%', //columnWidth的值乘以anchor的值,即为本组件所占的长度。
Extjs4.2 Grid单元格编辑
Extjs4.2 Grid单元格编辑效果图:实现代码:TcodeoneRowView.js/***@Description代码生成器-单表-行编辑模式视图层*@author张川(cr10210206@)*@date2014-01-1311:22:12*/Ext.define(zc.createView('test.TcodeoneRowView'),{ extend : 'Ext.panel.Panel',alias : 'widget.view_test_TcodeoneRowView',//视图别名layout : 'border',border : 0,items : [{region : 'north',xtype : 'panel',height : 0,border : 0,items : [{'xtype' : 'hiddenfield','id' : 'view_test_TcodeoneRowView_tbar_storeCount' }]},{region : 'center',xtype : 'gridpanel',layout : 'fit',border : 0,forceFit : true,//自动填充单元格selType : 'checkboxmodel',//多选框模式columns : [{dataIndex : 'id',text : '编号',width : 100,align : 'center',sortable : false,hidden : true,hideable : false},{dataIndex : 'name',text : '姓名',width : 100,align : 'center',sortable : false,editor : {xtype : 'textfield'}},{dataIndex : 'birthday',text : '出生日期',width : 100,align : 'center',sortable : false,renderer : Ext.util.Format.dateRenderer('Y-m-d'),editor : {xtype : 'datefield',format : 'Y-m-d'}},{dataIndex : 'status',text : '状态',width : 100,align : 'center',sortable : false,renderer:function(value,metaData,record,rowIndex,columnIndex,str oe,view){var result = '';if(value == 1){result = '<span style="color:green">启用</span>';}else if(value == 0){result = '<span style="color:gray">禁用</span>';}return result;},editor : {xtype : 'view_test_TcodeoneRowStatusView'}}],store : 'test.TcodeoneRowStore'}],initComponent : function(){var listObj = this.items[1];listObj.dockedItems = [{xtype : Ext.widget('zc_grid_Toolbar',{//工具栏params : {initialism : 'test_TcodeoneRow',btnSearchg : true,btnSaveCancel : true}})},{xtype : 'pagingtoolbar', //分页栏dock : 'bottom',displayInfo : true,plugins : Ext.create('Ext.ux.ProgressBarPager'),// 分页进度条pageSize : 25,store : listObj.store}];listObj.plugins = [{//单元格编辑模式ptype : 'cellediting',clicksToEdit : 1,pluginId : 'view_test_TcodeoneRowView_pluginId'}];this.callParent(arguments);}});TcodeoneRowController.js/***@Description代码生成器-单表-行编辑模式控制层*@author张川(cr10210206@)*@date2014-01-1311:22:12*/Ext.define(zc.createController('test.TcodeoneRowController'),{ extend : 'Ext.app.Controller',stores : [zc.storeFactory.getStore({storeName : 'test.TcodeoneRowStore',modelName : zc.modelFactory.getModel('test.TcodeoneRow'),url : zc.bp() + '/test_TcodeoneRow_list.action'}),zc.storeFactory.getStore({storeName : 'test.TcodeoneRowStatusStore',modelName : zc.modelFactory.getModel('bdata.TdtnyCombo'),autoLoad : true,url : zc.getTdtnyValUrl(),params :{initialism : 'status'}})],views : [zc.viewFactory.getCombobox({viewName : 'test.TcodeoneRowStatusView',store : 'test.TcodeoneRowStatusStore'}),'test.TcodeoneRowView'],init : function(){this.control({'view_test_TcodeoneRowView > gridpanel' : {render : function(gridObj,eOpts){var scope = this;setTimeout(function(){//设置延时加载scope.refreshGridObj(gridObj);//加载数据},10);},afterrender : function(gridObj,eOpts){//数据加载完成后保存当前页的数据条数var scope = this;var storeObj = gridObj.getStore();storeObj.on('load',function(){var ct = storeObj.getCount();scope.setStoreCount(ct);});},beforeedit : function(editor, e, eOpts){ //编辑单元格前触发的事件,判断当前用户是否有操作权限return this.getAuth(e);}},'view_test_TcodeoneRowView > gridpanel button[action=tbar_refresh]' : { //刷新click : function(btn){this.refreshObj(btn);}},'view_test_TcodeoneRowView > gridpanel button[action=tbar_search]' : {//查询click : function(btn){this.searchObj(btn);}},'view_test_TcodeoneRowView > gridpanel button[action=tbar_add]' : { //新增click : function(btn){this.addObj(btn);}},'view_test_TcodeoneRowView > gridpanel button[action=tbar_update]' : { //修改click : function(btn){this.updateObj(btn);}},'view_test_TcodeoneRowView > gridpanel button[action=tbar_delete]' : {//删除click : function(btn){this.deleteObj(btn);}},'view_test_TcodeoneRowView > gridpanel button[action=tbar_save]' : { //保存click : function(btn){this.saveObj(btn);}},'view_test_TcodeoneRowView > gridpanel button[action=tbar_cancel]' : { //取消click : function(btn){this.cancelObj(btn);}}});},/***刷新**/refreshObj : function(btn){var scope = this;var gridObj = scope.getGridObj(btn);//获取datagrid对象scope.refreshGridObj(gridObj);//刷新datagrid对象},/***查询**/searchObj : function(btn){var scope = this;var gridObj = scope.getGridObj(btn);//获取datagrid对象var params = zc.getSearchParams(btn);//查询参数scope.refreshGridObj(gridObj,params);//刷新datagrid对象},/***新增**/addObj : function(btn){var scope = this;var gridObj = scope.getGridObj(btn);//获取datagrid对象var editor = scope.getPlugin(gridObj);//获取编辑对象var storeObj = gridObj.getStore();//获取Store对象var storeCount = storeObj.getCount();//获取Store个数var record = Ext.create(zc.modelFactory.getModel('test.TcodeoneRow'),{status : 1});storeObj.insert(storeCount,record);editor.startEditByPosition({row : storeCount,column : 1});},/***修改**/updateObj : function(btn){Ext.MessageBox.alert('温馨提示','请点击要修改的单元格!');},/***保存(保存新增和修改)**/saveObj : function(btn){var scope = this;var gridObj = scope.getGridObj(btn);//获取datagrid对象var storeObj = gridObj.getStore();//获取Store对象var storeCount = storeObj.getCount();//获取当前Store对象的个数var sjStoreCount = scope.getStoreCount();//Store的实际个数var records = null;var url = '';if(storeCount > sjStoreCount){//新增var tbarObj = scope.getTbarBtn(gridObj,'tbar_add');//获取请求地址if(!tbarObj.disabled){records = storeObj.getNewRecords();//获取新增后的数据url = tbarObj.btnurl;}}else {//修改var tbarObj = scope.getTbarBtn(gridObj,'tbar_update');//获取请求地址if(!tbarObj.disabled){records = storeObj.getUpdatedRecords();//获取修改后的数据url = tbarObj.btnurl;}}if(records != null){var result = [];var columns = gridObj.columns;//获取列集合for(var i = 0; i < records.length; i++){var record = records[i];var data = record.data;var t = {};for(var j = 0; j < columns.length; j++){var dataIndex = columns[j].dataIndex;t[dataIndex] = data[dataIndex];}result.push(Ext.JSON.encode(t));}zc.showMsgBox();//显示消息框Ext.Ajax.request({//保存到数据库url : zc.bp() + url,params : {str : result.join(';')},success : function(response, options){zc.hideMsgBox();//隐藏消息框Ext.MessageBox.alert('温馨提示','保存成功');scope.refreshGridObj(gridObj);//刷新gridPanel对象}});}},/***取消**/cancelObj : function(btn){var scope = this;var gridObj = scope.getGridObj(btn);//获取datagrid对象var storeObj = gridObj.getStore();//获取Store对象var storeCount = storeObj.getCount();//获取当前Store对象的个数var sjStoreCount = scope.getStoreCount();//Store的实际个数if(storeCount > sjStoreCount){//新增var selectedRecords = scope.getSelectionObj(gridObj);//获取选中的行对象数组var addRecords = storeObj.getNewRecords();//获取新增后的行对象数据if(selectedRecords != null && selectedRecords.length > 0){ storeObj.remove(selectedRecords);//删除所有选中的行对象}else{storeObj.remove(addRecords);//删除所有新增的行对象}}},/***删除**/deleteObj : function(btn){var scope = this;var gridObj = scope.getGridObj(btn);//获取datagrid对象var records = scope.getSelectionObj(gridObj);//获取选中行数组if(records == null || records.length == 0){Ext.MessageBox.alert('温馨提示','请勾选要删除的记录!');return;}var ids = [];Ext.each(records, function(record){//循环选中行数组获取每一条记录的唯一标识var id = record.get('id');ids.push(id);});var url = zc.bp() + btn.btnurl;Ext.MessageBox.confirm('温馨提示','确定要删除勾选的记录吗?',function(btn,txt){if(btn == 'yes'){Ext.Ajax.request({url : url,params : {str : ids.join(',')},success : function(response, options){Ext.MessageBox.alert('温馨提示','删除成功');scope.refreshGridObj(gridObj);//刷新gridPanel对象}});}});},/***刷新grid**@param gridObj数据表格对象*@param params请求参数**/refreshGridObj : function(gridObj,params){var scope = this;gridObj.getSelectionModel().deselectAll();//取消所有选中的行对象var storeObj = gridObj.store;//获取Store对象storeObj.currentPage = 1;//设置为当前页storeObj.on('beforeload', function (store, options) {//加载前设置参数if(params != undefined && params != null){storeObj.proxy.extraParams = params;}});storeObj.load();//调用加载方法},/***获取grid对象**@param btn按钮对象**/getGridObj : function(btn){var gridObj = btn.up('gridpanel');//获取datagrid对象return gridObj;},/***获取选中行数组**@param btn按钮对象**/getSelectionObj : function(gridObj){var records = gridObj.getSelectionModel().getSelection();//获取选中行数组return records;},/***获取单元格编辑对象**/getPlugin : function(gridObj){var editorPlugin = gridObj.getPlugin('view_test_TcodeoneRowView_pluginId');return editorPlugin;},/***设置Store个数**/setStoreCount : function(storeCount){var sctid = 'view_test_TcodeoneRowView_tbar_storeCount';var sctObj = Ext.getCmp(sctid);if(sctObj != undefined && sctObj != null){Ext.getCmp(sctid).setValue(storeCount);}},/***获取Store个数**/getStoreCount : function(){returnExt.getCmp('view_test_TcodeoneRowView_tbar_storeCount').getValue();},/***判断当前用户是否有操作权限**/getAuth : function(e){var scope = this;var gridObj = e.grid;var rowIndex = e.rowIdx;//获取当前行的下标var sjStoreCount = scope.getStoreCount();//Store的实际个数if((rowIndex+1) > sjStoreCount){//新增的权限var item = scope.getTbarBtn(gridObj,'tbar_add');return !item.disabled;}else{//修改的权限var item = scope.getTbarBtn(gridObj,'tbar_update');var storeCount = gridObj.getStore().getCount();//获取当前Store对象的个数if(storeCount > sjStoreCount){//新增时取消修改操作return false;}return !item.disabled;}},/***获取工具栏按钮**@param gridObj grid对象*@param actionname工具栏按钮的action属性**/getTbarBtn : function(gridObj,actionname){var dockedItems = gridObj.getDockedItems('toolbar[dock="top"]')[0].items.items;for(var i = 0; i < dockedItems.length; i++){var item = dockedItems[i];if(item.action == actionname){return item;}}}});。
Extjs 4.2.0 MVC教程
Extjs 4.2.0 MVC 架构内容: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使用1. 文件结构------------------------------------------------------------------------------------------------------------ Ext JS 4 对所有应用定义相同的目录结构。
extjs最常用的表单
常用配置项
baseParams : Object, //请求时的附加参数,格式为{id: '123', foo: 'bar'} errorReader : DataReader, //提交时发生验证错误,这个dataReader将会被 使用 fileUpload : Boolean, //支持文件上传 method : String, //GET或者POST reader : DataReader, //load时使用的数据读取器 timeout : Number, //超时时间 trackResetOnLoad : Boolean,//支持使用reset方法恢复原始值 url : String //form要提交的url地址
常用方法 onTriggerClick( EventObject e ) : void
boBox
支持自动完成,远程加载数据,分页等特性,是开 发中使用频率非常高的组件。 本地数据example26 此组合框包括的特点 1)允许用户输入但是要求输入值必须是列表中已存 在的条目 2)在用户输入过程中自动匹配选择剩余的文本 3)用户可以自由改变下拉列表的大小 这三个需求通过设置forceSelection typeAhead和 resizable实现。
继承自Ext.form.Checkbox,单选框 多了一个方法 getGroupValue() : String如果单选框是一组 radio 的一部分,取当前选中的值 Ext.form.Hidden继承自Field,隐藏字段,无新 特性
Ext.form.TriggleField
增加了一个单击的触发按钮,必须指派函数, 可以直接创建,也可以作为基类扩展,如 boBox组件和 Ext.form.DataField组件 example25
Eclipse支持HTML&JS&ExtJS&jQuery代码智能提示
Eclipse支持HTML&JSExtJS&jQuery代码智能提示2012-06-01安装HTML插件GEF和EclipseHTMLEditor一、GEF下载安装进到网页/gef/downloads/点6.2M的那个。
会进入下载页面/downloads/download.php?file=/tools/gef/downloads/drops/3.7.2/R201201171 043/GEF-ALL-3.7.2.zip点击红色框内链接下载,链接地址如下:/downloads/download.php?file=/tools/gef/downloads/drops/3.7.2/R201201171 043/GEF-ALL-3.7.2.zip&url=/eclipse/tools/gef/downloads/drops/3.7.2/R20120117 1043/GEF-ALL-3.7.2.zip&mirror_id=385GEF-ALL-3.7.2.zip解压出来如下图:把features目录下的全部拷贝到eclipse/features下,把plugins目录下的文件全部拷贝到eclipse/plugins下。
二、安装EclipseHTMLEditor进入页面http://sourceforge.jp/projects/amateras/downloads/51002/tk.eclipse.plugin.htmleditor_2.1.0.jar/点击红色框内下载地址,链接地址如下:http://sourceforge.jp/frs/redir.php?m=iij&f=%2Famateras%2F51002%2Ftk.eclipse.plugin.htmleditor_2.1 .0.jar把该文件tk.eclipse.plugin.htmleditor_2.1.0.jar拷贝到eclipse/plugins下。
Extjs常用属性
ExtJS是一个很不错的Ajax框架,可以用来开发带有华丽外观的富客户端应用,使得我们的b/s应用更加具有活力及生命力。
ExtJS是一个用javascript编写,与后台技术无关的前端ajax框架。
因此,可以把ExtJS用在.Net、Java、Php等各种开发语言开发的应用中。
在学习了本教程后,可以下载这个基于ExtJS2.0开发的单用户Blog系统的源代码,这个系统是我们团队中的williamraym与大峡等人开发的一个演示系统,系统源码整体质量比较高,通过学习这套源代码相邻一定能提高您ExtJS的综合水平。
ExtJS是一个Ajax框架,是一个用javascript写的,用于在客户端创建丰富多彩的web应用程序界面。
ExtJS可以用来开发RIA也即富客户端的AJAX应用,下面是一些使用ExtJS 开发的应用程序截图:ExtJS是一个用javascript写的,主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架。
因此,可以把ExtJS用在.Net、Java、Php等各种开发语言开发的应用中。
ExtJs最开始基于YUI技术,由开发人员Jack Slocum开发,通过参考Java Swing等机制来组织可视化组件,无论从UI界面上CSS样式的应用,到数据解析上的异常处理,都可算是一款不可多得的JavaScript客户端技术的精品。
Ext2.0对框架进行了非常大的重构,其中最重要的就是形成了一个结构及层次分明的组件体系,由这些组件形成了Ext的控件,Ext组件是由Component类定义,每一种组件都有一个指定的xtype属性值,通过该值可以得到一个组件的类型或者是定义一个指定类型的组件。
组件大致可以分成三大类,即基本组件、工具栏组件、表单及元素组件。
基本组件有:xtype Class------------- ------------------box Ext.BoxComponent 具有边框属性的组件button Ext.Button按钮colorpalette Ext.ColorPalette 调色板component ponent组件container Ext.Container容器cycle Ext.CycleButton一个SplitButton的实用子类,用于在多个item之间切换状态dataview Ext.DataView 数据显示视图datepicker Ext.DatePicker 日期选择面板editor Ext.Editor编辑器editorgrid Ext.grid.EditorGridPanel 可编辑的表格grid Ext.grid.GridPanel 表格paging Ext.PagingToolbar 工具栏中的间隔panel Ext.Panel面板progress Ext.ProgressBar 进度条splitbutton Ext.SplitButton 可分裂的按钮tabpanel Ext.TabPanel选项面板treepanel Ext.tree.TreePanel 树viewport Ext.ViewPort 视图window Ext.Window窗口工具栏组件有---------------------------------------toolbar Ext.Toolbar工具栏tbbutton Ext.Toolbar.Button按钮tbfill Ext.Toolbar.Fill文件tbitem Ext.Toolbar.Item工具条项目tbseparator Ext.Toolbar.Separator工具栏分隔符tbspacer Ext.Toolbar.Spacer工具栏空白tbsplit Ext.Toolbar.SplitButton 工具栏分隔按钮tbtext Ext.Toolbar.TextItem工具栏文本项表单及字段组件包含:---------------------------------------form Ext.FormPanel Form面板checkbox Ext.form.Checkbox checkbox录入框combo boBox combo选择项datefield Ext.form.DateField日期选择项field Ext.form.Field表单字段fieldset Ext.form.FieldSet表单字段组hidden Ext.form.Hidden 表单隐藏域htmleditor Ext.form.HtmlEditor html编辑器numberfield Ext.form.NumberField数字编辑器radio Ext.form.Radio单选按钮textarea Ext.form.TextArea区域文本框textfield Ext.form.TextField表单文本框timefield Ext.form.TimeField时间录入项trigger Ext.form.TriggerField触发录入项Ext.Panel API翻译activeItem : String/Number用于设置当前活动的子组件,取值为此子组件的序号或者是id。
通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8)
系统可作为OA、网站、电子政务、ERP、CRM、APP后台等基于B/S架构的应用软件系统的快速开发框架。
一、特色功能1、采用Spring MVC的静态加载缓存功能,在首页将Javascript文件、CSS文件和图片等静态资源文件加载进来放进内存,极大提高ExtJS的加载速度。
2、三种皮肤主题:经典、灰色和海王星,支持多浏览器和多分辨率。
3、分别封装了模型层、控制层、业务逻辑层和数据持久层的通用操作模块,层次分明,大大减少代码冗余,二次开发效率高。
4、系统是公司多个项目的基础框架,稳定性好,支持大并发。
二、主要功能1、采用ExtJS 4.2.1.883无限制版本,放心用于网站开发。
2、ExtJS富文本编辑器增加修改信息。
3、ExtJS的HtmlEditor的图片文件上传插件。
4、Grid列表和表单,包含添加、删除、批量删除、修改、查看、图片查看和按条件查询列表等功能。
5、导入导出Excel数据,支持xlsx和xls文件。
6、资源管理(菜单管理)。
7、用户管理和部门管理。
8、权限管理。
不仅可管理各个功能模块的权限,也可以管理功能模块里的页面按钮权限。
9、报表统计。
也可以嵌入其他报表工具插件。
10、采用开源的互动地图Javascript库Leaflet,处理自定义在线地图。
Panel里包含2个组件,在2个组件间传递参数显示数据。
三、开发工具和采用技术1、开发工具:Eclipse、MyEclipse和其他IDE。
2、采用Spring 3中最新最稳定的Spring MVC 3.2.8版本。
3、采用Hibernate 4.1.7。
Spring MVC 3.2.8支持的最高Hibernate版本是4.1.7,更高的Hibernate版本和Spring MVC 3.2.8组合会遇到兼容问题。
4、Hibernate集成二级缓存框架Ehcache。
5、数据库是MySQL、Oracle和SQL Server,Hibernate的Dialect可使程序移植到其他数据库。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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);}});。