分享extjs4.0实现系统界面的代码
Extjs4.0.7 desktop基础搭建
Extjs4.0.7 desktop初级搭建涉及内容:1.classes.js的拆分2.App.js和Settings.js里代码的含义3.桌面图标的换行4.一些小小的修改首先上官网上下载最新版本的Extjs,本次讲解以4.0.7版本为例,下载地址/products/extjs/download/ext-js-4.0.7/1234然后打开myeclipse新建一个web project工程,这个工程的结构如下其中core文件夹用于存放desktop的核心代码css文件夹用于存放样式表ext文件夹用于存放ext-all.js等images文件夹用于存放desktop实例中imagesmodules文件夹用于存放桌面上显示的模块resources文件夹用于存放desktop实例自带的壁纸文件夹wallpapers 和Extjs中resources下的themes文件夹接下来把App.js,Settings.js和index.jsp(即desktop.html)放在webroot 目录下面一.classes.js的拆分:首先来看一下index.jsp中的代码<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01//EN""/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=utf-8"><title>extjs4 desktop</title><!-- css --><link rel="stylesheet"type="text/css" href="js/css/ext-all.css"/><link rel="stylesheet"type="text/css" href="js/css/desktop.css"/><!-- base js --><script type="text/javascript"src="js/ext/ext-all.js"></script><script type="text/javascript"src="js/ext/ext-lang-zh_CN.js"></script> <!-- core js --><script type="text/javascript"src="js/core/Module.js"></script><script type="text/javascript"src="js/core/Video.js"></script><script type="text/javascript"src="js/core/Wallpaper.js"></script> <script type="text/javascript"src="js/core/FitAllLayout.js"></script> <script type="text/javascript"src="js/core/StartMenu.js"></script> <script type="text/javascript"src="js/core/TaskBar.js"></script><script type="text/javascript"src="js/core/ShortcutModel.js"></script> <script type="text/javascript"src="js/core/Desktop.js"></script><script type="text/javascript"src="js/core/App.js"></script><!-- module js --><script type="text/javascript"src="modules/WallpaperModel.js"></script> <script type="text/javascript"src="modules/VideoWindow.js"></script> <script type="text/javascript"src="modules/BogusModule.js"></script> <script type="text/javascript"src="modules/BogusMenuModule.js"></script> <script type="text/javascript"src="modules/TabWindow.js"></script> <script type="text/javascript"src="modules/GridWindow.js"></script> <script type="text/javascript"src="modules/AccordionWindow.js"></script> <script type="text/javascript"src="modules/SystemStatus.js"></script><script type="text/javascript"src="modules/Notepad.js"></script><!-- config js --><script type="text/javascript"src="Settings.js"></script><script type="text/javascript"src="App.js"></script> <script type="text/javascript">Ext.Loader.setPath({'Ext.ux.desktop': 'js',MyDesktop: ''});Ext.require('MyDesktop.App');var myDesktopApp;Ext.onReady(function () {myDesktopApp = new MyDesktop.App();});</script></head><body><a href=""target="_blank"alt="Powered by Ext JS"id="poweredby"><div></div></a></body></html>其实有了这段代码就算是拆分完了,但是还不够,我们还需要修改两个地方,1.settings.js中修改2.App.js中修改以上两处如果不改当你在桌面上点击右键来改变桌面背景图片时会发生错误。
ExtJs4.0入门教程
ExtJS简介
ExtJS显示效果示例1
ExtJS简介
ExtJS显示效果示例2
ExtJS简介
认识ExtJS的开发包
要开始ExtJS之旅的第一步是要获得开发包,可以 从官方网站/下载。下载 地址是 /products/extjs/downloa d
•
ExtJS组件之Panel
•
控件
控件(widgets):控件是指可以直接在页面中创建 的可视化组件,比如面板、选项板、表格、树、 窗口、菜单、工具栏、按钮等等,在我们的应用 程序中可以直接通过应用这些控件来实现友好、 交互性强的应用程序的UI。
ExtJS基础组件
•
组件分类举例
容器组件:如toolbar、pagingtoolbar、panel、 form、menu、treePanel、gridPanel、window等。 工具栏及菜单栏组件:如tbseparator(工具栏分 隔符)、menuitem(菜单项)等。 表单及元素组件:如checkboxfield(复选框)、 combo(下拉列表)、datefield(日期选择项)等。 其他组件(包括图表、视图、编辑、按钮组件): 如chart、button。
• • • • •
• •
ExtJS简介
ExtJS API文档
ExtJS简介
•
从Hello World开始
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <link rel='stylesheet' type='text/css' href='./ext/resources/css/ext-all.css'> <script type="text/javascript" src="./ext/bootstrap.js"></script> <script type="text/javascript"> Ext.onReady(function(){ Ext.MessageBox.alert('helloWorld',"I'm coming"); }); </script> </head> <body> </body> </html>
ExtJs源码笔记------Ext.js
ExtJs源码笔记------Ext.jsExtJs 源码笔记------Ext.js最近准备系统的学习⼀下Ext的源码,SO,话不多说,从第⼀篇开始。
⾸先,先看⼀下Ext.js这个⽂件的代码结构:var Ext = Ext || {}; // 定义全局变量Ext._startTime = new Date().getTime();(function(){// 定义⼀些局部变量var ......// 核⼼Ext.apply = function(){......};// 初始化 Ext 的⼀些属性函数Ext.apply(Ext, {......});}());// 全局闭包Ext.globalEval = ......代码的结构不难,但是仔细看下来,有些细节的地⽅还是很值得回味⼀番。
下⾯具体分析⼀下我对源码的理解,⽔平有限,不⾜之处还望各位看官指正。
1. 定义局部变量var global = this,objectPrototype = Object.prototype,toString = objectPrototype.toString,enumerables = true,enumerablesTest = {toString: 1},emptyFn = function () {},......for (i in enumerablesTest) {enumerables = null;}// 看到这⾥的时候,有点疑惑,enumerables 不是肯定会被置为 null 吗// 下⾯为什么还需要判断enunerables? 有蹊跷.....// 返回去再看⼀下 enumerablesTest,⾥⾯只有⼀个属性 toString, 为啥偏偏是这样的⼀个属性??嗯!想起来了,在IE6下,对象中的toString属性,不能通过hasOwnProperty或for...in迭代得到// So,这⾥其实就是为了兼容IE6⽤的。
初学Extjs实现简单的登录
这是我刚学会的,用的是Extjs技术。
在此之前也遇到一些问题。
我现在把我之前遇到的问题和处理好之后得到的结果和大家分享。
希望朋友们在学习的时候少走些弯路,尽情的体验Extjs的强大!首先把Ext2.2的包Copy到WebRoot目录下。
在需要的页面里导入即将要用到的文件。
如下:<link rel="stylesheet"type="text/css" href="../ext-2.2.1/resources/css/ext-all.css"><script type="text/javascript" src="../ext-2.2.1/adapter/ext/ext-base.js"></script><script type="text/javascript" src="../ext-2.2.1/ext-all.js"></script>注意这些文件导入的顺序。
然后开始写登录页面,代码如下(注意格式):<script type="text/javascript">Ext.onReady(function(){var formPanel = new Ext.form.FormPanel({title:'LOGIN',id:'elId',autoHeight:true,x:200,y:200,width:300,renderTo:Ext.getBody(),frame:true,labelWidth:80,cls:'text-align:center',labelAlign:'right',items:[{xtype:'textfield',name:'username',fieldLabel:'用户名',msgTarget:'under',allowBlank:false,blankText:'请输入用户名',},{xtype:'textfield',fieldLabel:'密码',name:'pwd',allowBlank:false,inputType:'password',blankText:'请输入密码',msgTarget:'under'}],buttonAlign:'center',buttons:[{xtype:'button',text:'登录',scope:this,handler:login},{xtype:'button',text:'重置',scope:this,handler:reset}]});//登录function login(){formPanel.form.submit({clientValidation:true,waitMsg:'正在登陆系统请稍后……',url:'login.jsp',method:'POST',success:function(form,action){Ext.Msg.alert('提示','登录成功');window.location.replace('test.html');//登录成功后跳转页面},failure:function(form,action){Ext.Msg.alert('提示','登录失败');}});}//重置function reset(){formPanel.form.reset();}});</script>在body部分不需要写,当然了,这只是一个世界上最简单的登录。
项目案例笔记(二)Ext4的mvc结构
Extjs4MVC模式案例一、效果展示:二、代码实现Mvc模式应遵守以下目录结构Controller:控制层Data:数据(一般开发中这个目录不用要,而是直接使用store连接到ws)Model:模型Store:数据源Ux:用户自定义View:视图层Module.js:主通道入口1.jsp页面:module.jsp<%@page contentType="text/html;charset=UTF-8"%><%@include file="/common/core/taglibs.jsp"%><%@pageimport="org.springframework.security.web.authentication.AbstractAuthe nticationProcessingFilter"%><%@pageimport="ernamePassw ordAuthenticationFilter"%><%@page import="org.springframework.security.web.WebAttributes"%><!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><title>.:GHT综合网管系统:.</title><%@include file="/common/core/meta.jsp"%><link rel="stylesheet"type="text/css"href="${ctx}/resource/core/ext-4.1.1/resources/css/ext-all.css"/><link rel="stylesheet"type="text/css"href="${ctx}/css/core/ext/ext4-cn-font.css"/><link rel="stylesheet"type="text/css"href="${ctx}/css/core/home.css"/><script type="text/javascript"src="${ctx}/resource/core/ext-4.1.1/ext-all-debug.js"></script><script type="text/javascript"src="${ctx}/resource/core/ext-4.1.1/locale/ext-lang-zh_CN.js"></scrip t><scripttype="text/javascript">ctx="${ctx}";accountObj="${accountObj}";</scri pt><script type="text/javascript"src="${ctx}/js/core/platform/util/loadpaths.js"></script><script type="text/javascript"src="${ctx}/js/common/common.js"></script><script type="text/javascript"src="${ctx}/js/core/ext4/func/extWrapper.js"></script><script type="text/javascript"src="${ctx}/js/core/platform/auth/authGranted.js"></script><script type="text/javascript"src="${ctx}/js/common/object/hashtable.js"></script><script type="text/javascript">scopeId =jsAccountObj.areaId;</script><script type="text/javascript"src="${ctx}/js/g2s/sysinfo/ext4/Module.js"></script><link rel="stylesheet"href="${ctx}/css/core/ext/el-style-lib.css" type="text/css"/><!-- 去掉fieldset的边框 --><style type="text/css">.x-fieldset{border:0px solid#B5B8C8;padding:10px;margin-bottom:10px;}</style></head><body><div id="centerPanel"></div></body></html>2、Module.js 程序的开始/***系统信息-模块信息**/var app2 = new Ext.app.Application({name:'Module',appFolder:ctx+'/js/g2s/sysinfo/ext4',controllers:['ModuleCtrl'],launch:function(){//一个简单发射器Ext.QuickTips.init();var view= Ext.create('Ext.container.Viewport',{layout: 'fit',renderTo: Ext.getBody(),items: {xtype: 'modulelist'}});}});2.创建控制层:ModuleCtrl.jsExt.define('Module.controller.ModuleCtrl', {extend: 'Ext.app.Controller',stores:['ModuleStore'],models:['ModuleModel'],views: ['module.ModuleList',//列表'module.ModuleEdit',//修改'module.ModuleAdd'//添加页面],init: function() {this.control({'viewport >modulelist':{itemdblclick:this.updateModule1 //itemdblclick:双击事件},/* 'moduledit button[action=save]': {click: this.updateUser//单击表单保存按钮},*/'viewport > modulelist button[id=addModule] ':{click:this.addModule//添加模块},'viewport > modulelist button[id=editModule]':{click:this.updateModule//修改模块},'viewport > modulelist dataview': {itemclick: this.saveSelectModel//保存被点击的一列信息},'viewport > modulelist button[id=delModule]':{click:this.deleteModule},//重启模块'viewport > modulelist button[id=restart]':{click:this.restartModule}});},/* //修改userupdateUser:function(button){console.log('clicked the Save button');var win=button.up('window');var form=win.down('form');var record=form.getRecord();var values=form.getValues();record.set(values);win.close();this.getext4Store().sync();},*///双击列表updateModule1:function(grid,record){var view = Ext.widget('moduledit').show();//相当于Ext.create ('eredit“)一个小点的组件// this.editWin = Ext.create('Module.view.module.ModuleEdit').show();view.down('form').loadRecord(record);//Ext JS4的每个组件有一个down函数,可以使用它快速的找到任何他的子组件},//添加moduleaddModule:function(button){var insertWin = Ext.create('Module.view.module.ModuleAdd').show();},//保存选中行信息saveSelectModel: function(view,model){this.updModel = model;},//修改ModuleupdateModule:function(button){var me = this;if(me.updModel == null){extWarn('提示信息', '请至少选择一条数据!');return;};me.editWin = Ext.create('Module.view.module.ModuleEdit').show();me.editWin.down('form').loadRecord(me.updModel);},//删除ModuledeleteModule:function(button){var me = this;var record = Ext.getCmp('moduleList').getSelectionModel().getSelection();if(me.updModel==null){if(record.length<=0){//这个主要判断用户是否点击全选extWarn('提示信息', '请至少选择一条数据!');return;}};extQuestion('提示信息', '你确认要删除选择的模块吗?', function(btn) {if (btn == "yes") {me.selectCheckBox(me.updModel);extWarn('提示信息','删除成功!');}});},//多选操作selectCheckBox:function(updmodel){var record = Ext.getCmp('moduleList').getSelectionModel().getSelection();var ids = "";for(var i = 0; i < record.length; i++){ids += record[i].get("id");//(有id了害怕删不出吗?)if(i<record.length-1){ids = ids + ",";}}alert(ids);},//重启模块restartModule:function(button){/*** 重启模块* */}});3.模型层: ModuelModel.jsExt.define('Module.model.ModuleModel',{extend:'Ext.data.Model',fields:['instanceId','moduleName','authNo','moduleType','priority','reRegisterCount','addrInfo','state','desp']});/**private String instanceId;//实例idprivate String moduleName;//模块名称private String authNo;//授权码private String moduleType;//模块类型private String priority;//优先级private String reRegisterCount;重注册次数private String addrInfo;//地址信息private String state;//状态private String desp;//描述***/4.数据层 ModuleStoreExt.define('Module.store.ModuleStore',{extend:'Ext.data.Store',model:'Module.model.ModuleModel',autoLoad:true,//使用代理自动加载数据//使用api新的代理proxy:{type:'ajax',api:{read:ctx+'/js/g2s/sysinfo/ext4/data/module.json', update:ctx+'/js/g2s/sysinfo/ext4/data/data/updateModule.json'},reader:{type:'json',root:'users',successProperty:'success'}}});5.视图层 ModuleList.jsExt.require(['Ext.grid.*','Ext.data.*','Ext.selection.CheckboxModel']);//创建多选var selModel = Ext.create('Ext.selection.CheckboxModel',{ dataIndex:'instanceId'});// 定义选择框Ext.define('Module.view.module.ModuleList' ,{extend: 'Ext.grid.Panel',alias : 'widget.modulelist',//widget看作一个小的组件 title : ' 系统信息>>模块信息 ',store:'ModuleStore',region: 'center',id:'moduleList',border:true,selModel: selModel,initComponent:function(){this.tbar=[{id:'addModule',xtype:'button',text:'新建模块',disabled:false,tooptip:'新建模块',iconCls : 'add'},'-',{id:'editModule',xtype:'button',text:'修改模块',disabled:false,tooptip:'修改模块',iconCls:'edit'},'-',{id:'delModule',xtype:'button',text:'删除模块',disabled:false,tooptip:'删除模块',iconCls:'delete'},'-',{id:'restart',xtype:'button',text:'重启模块',disabled:false,tooptip:'重启模块',iconCls:'refurbish'}];this.callParent();},columns:[{header: '实例号', dataIndex:'instanceId',align:'center',flex: 1},{header: '模块名', dataIndex: 'moduleName',align:'center', flex: 1},{header: '授权码', dataIndex: 'authNo',align:'center', flex: 1},{header: '模块类型', dataIndex:'moduleType',align:'center', flex: 1},{header: '优先级', dataIndex: 'priority',align:'center', flex: 1},{header: '重注册次数', dataIndex:'reRegisterCount',align:'center', flex: 1},{header: '地址信息', dataIndex: 'addrInfo',align:'center', flex: 1},{header: '状态', dataIndex: 'state',align:'center', flex: 1},{header: '描述', dataIndex: 'desp',align:'center', flex: 1} ]});/****private String instanceId;//实例idprivate String moduleName;//模块名称private String authNo;//授权码private String moduleType;//模块类型private String priority;//优先级private String reRegisterCount;重注册次数private String addrInfo;//地址信息private String state;//状态private String desp;//描述**/6.数据,在这里使用JSON读取.json 数据文件Module.json{success:true,users:[{id:5,instanceId:'authNo',moduleName:'authNo',authNo:'authNo',moduleType:'moduleType',priority:'priority',reRegisterCount:'reRegist erCount',addrInfo:'addrInfo',state:'state',desp:'desp'},{id:10,instanceId:'authNo2',moduleName:'authNo2',authNo:'authNo2' ,moduleType:'moduleType2',priority:'priority2',reRegisterCount:'reRegi sterCount2',addrInfo:'addrInfo2',state:'state2',desp:'desp2'}]}/**private String instanceId;//实例idprivate String moduleName;//模块名称private String authNo;//授权码private String moduleType;//模块类型private String priority;//优先级private String reRegisterCount;重注册次数private String addrInfo;//地址信息private String state;//状态private String desp;//描述***/7.增加模块:ModuleAdd.js (视图)Ext.define('Module.view.module.ModuleAdd',{extend:'Ext.window.Window',alias:'widget.moduleadd',title:'',closable: true,closeAction: 'hide',width: 410,height: 270,layout: 'border',autoDestroy:true,buttonAlign: 'center',bodyStyle: 'padding: 0px;border:0px',initComponent: function(){var me = this;this.items = [{region: 'center',bodyStyle:'padding:10px 10px 10px 10px',xtype: 'form',id: 'addmodule',frame: true,layout:'fit',items: [{// region: 'north',xtype:'fieldset',title: '新增模块',defaultType: 'textfield',layout: 'anchor',defaults: {anchor: '95%',allowBlank:false,msgTarget:'side'},items :[{xtype:'textfield',name:'instanceId',id:'instanceId',fieldLabel:'实 例 号' },{xtype:'textfield',name:'moduleType',id:'moduleType',labelAlign:'center',fieldLabel:'媒体类型'},{xtype:'textfield',name:'priority',id:'priority',fieldLabel:'优 先 级'},{xtype:'textfield',name:'authNo',id:'authNo',fieldLabel:'授 权 码',},{xtype:'textfield',name:'desp',fieldLabel:'描 述'}]}]}];this.buttons=[{text: '保存',action: 'save'},{text: '取消',scope: this,handler: this.close}];this.callParent(arguments);}/*,insertData: function(me,model,json){//me.close();me.mappedStore.insertData(model);//me.fireEvent("afterSync");}*/});/*Ext.define('Module.view.module.ModuleAdd',{extend:'Ext.window.Window',alias:'widget.moduleadd',title:'新增模块',//layout:'fit',//width:440,//height:235,x:300,y:50,floating:true,frame:true,bodyStyle:'padding:20px 70px 20px 70px', labelSeparator:':',labelAlign:'center',buttonAlign:'center',defaults:{xtype:'textfield',width:250,allowBlank:false,msgTarget:'side'},//提取共同属性initComponent:function(){this.items=[{xtype:'textfield',name:'instanceId',id:'instanceId',fieldLabel:'实 例 号' },{xtype:'textfield',name:'moduleType',id:'moduleType',labelAlign:'center',fieldLabel:'媒体类型'},{xtype:'textfield',name:'priority',id:'priority',fieldLabel:'优 先 级' },{xtype:'textfield',name:'authNo',id:'authNo',fieldLabel:'授 权 码', },{xtype:'textfield',name:'desp',fieldLabel:'描 述' }];this.buttons=[{text: 'Save',action: 'save'},{text: 'Cancel',scope: this,handler: this.close}];this.callParent(arguments);}});*//*Ext.define('Module.view.module.ModuleAdd',{ extend:'Ext.window.Window',alias:'widget.moduleadd',title:'新增模块',layout:'fit',autoshow:true,height: 450,width: 640,buttonAlign: 'center',labelAlign:'center',closable: true,layout:'border',modal : true,plain : true,initComponent:function(){this.items=[{xtype:'form',plain: true,width:640,labelAlign:'center',items:[{xtype:'textfield',name:'instanceId',id:'instanceId',fieldLabel:'实例号'},{xtype:'textfield',name:'moduleType',id:'moduleType',labelAlign:'center',fieldLabel:'媒体类型'},{xtype:'textfield',name:'priority',id:'priority',fieldLabel:'优先级'},{xtype:'textfield',name:'authNo',id:'authNo',fieldLabel:' 授权码',},{xtype:'textfield',name:'desp',fieldLabel:'描述'}]}];this.buttons = [{text: 'Save',action: 'save'},{text: 'Cancel',scope: this,handler: this.close}];this.callParent(arguments);}});*/7.修改: ModuleEdit.jsExt.define('Module.view.module.ModuleEdit', { extend: 'Ext.window.Window',alias : 'widget.moduledit',title:'修改模块',closable: true,closeAction: 'hide',width: 410,height: 270,layout: 'border',autoDestroy:true,buttonAlign: 'center',bodyStyle: 'padding: 0px;border:0px',initComponent: function(){var me = this;this.items = [{region: 'center',bodyStyle:'padding:10px 10px 10px 10px',xtype: 'form',id: 'addmodule',frame: true,layout:'fit',items: [{// region: 'north',xtype:'fieldset',title: '修改模块',defaultType: 'textfield',layout: 'anchor',defaults: {anchor: '95%',allowBlank:false,msgTarget:'side'},items :[{xtype:'textfield',name:'instanceId',id:'instanceId',fieldLabel:'实 例 号' },{xtype:'textfield',name:'moduleType',id:'moduleType',labelAlign:'center',fieldLabel:'媒体类型'},{xtype:'textfield',name:'priority',id:'priority',fieldLabel:'优 先 级' },{xtype:'textfield',name:'authNo',id:'authNo',fieldLabel:'授 权 码',},{xtype:'textfield',name:'desp',fieldLabel:'描 述'}]}]}];this.buttons=[{text: '保存',action: 'save'},{text: '取消',scope: this,handler: this.close}];this.callParent(arguments);},insertData: function(me,model,json){//me.close();me.mappedStore.insertData(model);//me.fireEvent("afterSync");}});。
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 :过滤数据,只需要指定数据关联
ext4.0中panel完整属性
Ext.Panel的主要功能
Posted on 2009-07-20 21:10linFen阅读(1634)评论(0)编辑收藏
上节介绍了ExtJS面板的主要表现形式,接下来将介绍面板组件的主要配置项及常用方法,这些配置项及方法将在后面的示例中用到,可以把这部分内容作为后续章节的铺垫,进行快速的浏览,Ext.Panel主要配置项目如表5-1所示。
collapsible
Boolean
设置是否允许面板进行展开和收缩,true则允许进行展开和收缩,并在面板头部显示伸缩按钮。默认为false
contentEl
String
设置面板的内容元素,可以是页面元素的id或已存在的HTML节点
defaultType
String
面板中元素的默认类型,默认为'panel'
应用于面板元素的基本样式类,默认为'x-panel'
bbar
Object/Array
设置面板的底端工具栏,可以是Ext.Toolbar对象、工具栏配置对象或button配置对象的数组。
bodyBorder
Boolean
设置是否显示面板体(body)的内部边框,true则显示,false则隐藏,默认为true。并且该项只在border = true时生效
bodyStyle
String/Object/
Function
应用于面板体(body)的自定义样式。默认为null
border
Boolean
这是是否显示面板体(body)的边框,true则显示,false则隐藏,默认为true。默认边框宽度为2px
buttonAlign
String
设置面板底部(footer)中按钮的对齐方式,有效值包括:'right', 'left'和'center',默认为'right'
Extjs4GridPanel的几种样式使用介绍
Extjs4GridPanel的⼏种样式使⽤介绍简单表格排序,显⽰某列,读取本地数据复制代码代码如下://本地数据var datas = [['1', 'gao', 'man'], ['2', 'gao', 'man'], ['3', 'gao', 'man']];//创建⾯板Ext.create('Ext.grid.Panel', {title: 'easy grid',width: 400,height: 300,renderTo: Ext.getBody(),frame: true,viewConfig: {forceFit: true,stripRows: true},store: {//配置数据代理fields: ['id', 'name', 'gender'],proxy: {type: 'memory',data: datas,reader: 'array' //数据读取器为数据读取},autoLoad: true},columns: [{ //⾃定义列信息header: 'id',width: 30,dataIndex: 'id', //绑定fields中得字段sortable: true}, {header: 'name',width: 80,dataIndex: 'name',sortable: true}, {header: 'gender',width: 80,dataIndex: 'gender',sortable: true}]})表格列:⾏号, bool⾏转成是否,⽇期格式化输出(date,top day), number数据类型格式化输出(change,volume),Action列(操作列)代码;复制代码代码如下:Ext.tip.QuickTipManager.init();Ext.create('Ext.data.Store', {storeId: 'sampleStore',fields: [{name: 'framework',type: 'string'}, {name: 'rocks',type: 'boolean'}, {name: 'volume',type: 'number'}, {name: 'topday',type: 'date'}, {name: 'change',type: 'number'}, {name: 'date',type: 'date'}, {name: 'price',type: 'number'}],data: {'items': [{"framework": "Ext JS 1","rocks": true,"symbol": "goog","date": '2011/04/22',"change": 0.8997,"volume": 3053782,"topday": '04/11/2010',"price": 1000.23}, {"framework": "Ext JS 2","rocks": true,"symbol": "goog","date": '2011/04/22',"change": 0.8997,"volume": 3053782,"topday": '04/11/2010',"price": 1000.23}, {"framework": "Ext JS 3","rocks": true,"symbol": "goog","date": '2011/04/22',"change": 0.8997,"volume": 3053782,"topday": '04/11/2010',"price": 1000.23}]},proxy: {type: 'memory',reader: {type: 'json',root: 'items'}}});Ext.create('Ext.grid.Panel', {title: 'Boolean Column Demo',store: Ext.data.StoreManager.lookup('sampleStore'), columns: [Ext.create('Ext.grid.RowNumberer', { text: '⾏号', width: 40 }), {text: 'Framework',dataIndex: 'framework',width: 100}, {xtype: 'booleancolumn',text: 'Rocks',trueText: '是',falseText: '否',dataIndex: 'rocks'}, {text: 'Date',dataIndex: 'date',xtype: 'datecolumn',format: 'Y年m⽉d⽇'}, {text: 'Change',dataIndex: 'change',xtype: 'numbercolumn',format: '0.000'}, {text: 'Volume',dataIndex: 'volume',xtype: 'numbercolumn',format: '0,000'}, {text: 'Top Day',dataIndex: 'topday',xtype: 'datecolumn',format: 'l'}, {text: 'Current Price',dataIndex: 'price',renderer: Money}, {header: '操作',xtype: 'actioncolumn', //操作列width: 100,items: [{icon: 'e.gif', // 编辑图⽚地址tooltip: ‘编辑', //⿏标over显⽰的⽂字使⽤此功能,必须 Ext.tip.QuickTipManager.init(); handler: function (grid, rowIndex, colIndex) {var rec = grid.getStore().getAt(rowIndex);alert("Edit " + rec.get('framework'));}}, {icon: 'd.gif',tooltip: 'Delete',handler: function (grid, rowIndex,colIndex) {var rec = grid.getStore().getAt(rowIndex);alert("Terminate " + rec.get('framework'));}}]}, {}],height: 200,width: 800,renderTo: Ext.getBody()});下⾯这个图是单击操作(编辑,删除)按钮触发的回调函数的详细信息.下⾯演⽰⾃定义渲染函数效果:复制代码代码如下:Ext.tip.QuickTipManager.init();function customFunction(value, metadata) {if (value > 10) {metadata.style = 'color:red';}return value;}Ext.create('Ext.data.Store', {storeId: 'sampleStore',fields: [ {name: 'custom',type: 'number'}],data: {'items': [{"custom": 10}, {"custom": 100}, {"custom": 1000}]},proxy: {type: 'memory',reader: {type: 'json',root: 'items'}}});Ext.create('Ext.grid.Panel', {title: 'Boolean Column Demo',store: Ext.data.StoreManager.lookup('sampleStore'), columns: [Ext.create('Ext.grid.RowNumberer', { text: '⾏号', width: 40 }), {text: 'custom',dataIndex: 'custom',renderer: customFunction //调⽤⾃定义函数来渲染}],height: 200,width: 800,renderTo: Ext.getBody()});选择模式:Selection选择模式分为三类:1,⾏选择(默认)2.单元格选择3.复选框选择(checkbox组)演⽰单元格选择代码:只需在上述代码配置节当中,加⼊复制代码代码如下:tbar: [{text: '取得所选单元格',handler: function () {var cell = grid.getSelectionModel().getCurrentPosition(); //getSelectionModel()获取当前选择模式,getCurrentPosition()获取当前选择的单元格alert(Ext.JSON.encode(cell));}}],selType:'cellmodel' //设置选择模式为单元格选择:效果:复制代码代码如下:tbar: [{text: '取得所选⾏',handler: function () {var rows = grid.getSelectionModel().getSelection(); //getSelection();获取当前选中的记录数组var msg = [];for (var i = 0; i < rows.length; i++) {var row = rows[i];var myDate = new Date(row.get('date'));msg.push('选中⾏的Date列:' + myDate.toLocaleString()); //转换时间格式}alert(msg.join('\n'));}}],selType: 'rowmodel', //选择模式为⾏选择simpleSelect: true, //简单选择功能开启multiSelect: true, // 启⽤多⾏选择enableKeyNav: true //启⽤键盘导航:效果:复制代码代码如下:tbar: [{text: '取得所选⾏',handler: function () {var rows = grid.getSelectionModel().getSelection(); //getSelection();获取当前选中的记录数组 var msg = [];for (var i = 0; i < rows.length; i++) {var row = rows[i];var myDate = new Date(row.get('date'));var s = grid.getStore(); //获取grid的数据源var number = s.indexOf(row) + 1; //获取⾏号+1 因为⾏号从0开始msg.push('选中第' + number + '⾏的Date列:' + myDate.toLocaleString());}alert(msg.join('\n'));}}],selType: 'checkboxmodel', //选择模式为⾏选择simpleSelect: true, //简单选择功能开启multiSelect: true, // 启⽤多⾏选择enableKeyNav: true //启⽤键盘导航表格汇总 Ext.grid.feature.Summary汇总值计算根据表格的每⼀列进⾏计算,计算⽅式有指定的 summaryType决定.默认的有上图5种.此例应⽤ sum和average复制代码代码如下:Ext.define('TestResult', {extend: 'Ext.data.Model',fields: ['student', {name: 'mark',type: 'int'}]});var grid = Ext.create('Ext.grid.Panel', {width: 200,height: 140,renderTo: document.body,features: [{ftype: 'summary'}],store: {model: 'TestResult',data: [{student: 'Student 1',mark: 84}, {student: 'Student 2',mark: 72}, {student: 'Student 3',mark: 96}, {student: 'Student 4',mark: 68}]},columns: [{dataIndex: 'student',text: 'Name',summaryType: 'count', //进⾏汇总的列名summaryRenderer: function (value) {grid.getStore()return Ext.String.format('{0} student{1}', value, value !== 1 ? 's' : ''); }}, {dataIndex: 'mark',text: 'Mark',summaryType: 'average'}]})var grid = Ext.create('Ext.grid.Panel', {width: 200,height: 140,renderTo: document.body,features: [{ftype: 'summary'}],store: {model: 'TestResult',data: [{student: 'Student 1',mark: 84}, {student: 'Student 2',mark: 72}, {student: 'Student 3',mark: 96}, {student: 'Student 4',mark: 68}]},columns: [{dataIndex: 'student',text: 'Name',summaryType: 'count', //进⾏汇总的列名summaryRenderer: function (value) {// grid.getStore()return Ext.String.format('{0} student{1}', value, value !== 1 ? 's' : ''); }}, {dataIndex: 'mark',text: 'Mark',summaryType: 'average',,summaryRenderer: function (value) {// grid.getStore()return Ext.String.format(' 平均分为:{0}', value);}]})代码:复制代码代码如下:Ext.define('TestResult', {extend: 'Ext.data.Model',fields: ['student', 'class', {name: 'mark',type: 'int'}]});var grid = Ext.create('Ext.grid.Panel', {width: 400,height: 300,renderTo: document.body,features: [Ext.create('Ext.grid.feature.Grouping',{groupByText: '⽤本字段分组',showGroupsText: '显⽰分组',groupHeaderTpl: '班级: {name} ({rows.length})', //分组显⽰的模板startCollapsed: true //设置初始分组是不是收起})],store: {model: 'TestResult',groupField: 'class',data: [{student: 'Student 1',class: '1',mark: 84}, {student: 'Student 2',class: '1',mark: 72}, {student: 'Student 3',class: '2',mark: 96}, {student: 'Student 4',class: '2',mark: 68}]},columns: [{dataIndex: 'student',text: 'Name',summaryType: 'count', //进⾏汇总的列名summaryRenderer: function (value) {grid.getStore()return Ext.String.format('{0} student{1}', value, value !== 1 ? 's' : '');}}, {dataIndex: 'mark',text: 'Mark',summaryType: 'average'},{ dataIndex: 'class',text: 'class'}]})//在不同的列下⾯点击 “⽤本字段分组”那么表格就会⽴即改变分组规则.代码只需要把上⾯的 Grouping 改成 GroupingSummary代码:复制代码代码如下:var datas = [['gao', Date(1922, 02, 03), 2000]];Ext.create('Ext.grid.Panel', {title: '演⽰',frame: true,renderTo: Ext.getBody(),width: 400,height: 300,store: {fields: ['name', 'birth', 'salary'],data: datas,proxy: {type: 'memory',data: datas,reader: 'array'},autoLoad: true},plugins: [Ext.create('Ext.grid.plugin.CellEditing', {clicksToEdit: 1})],selType: 'cellmodel',columns: [Ext.create('Ext.grid.RowNumberer', { text: '⾏号', width: 40 }), {header: '姓名',width: 80,dataIndex: 'name',editor: {//定义字段xtype: 'textfield',allowBlank: false,}},{header: '⽣⽇',width: 100,dataIndex: 'birth',xtype: 'datecolumn',editor: {//定义字段xtype: 'datefield',format: 'Y-m-d',allowBlank: false}},{header: '⼯资',width: 100,dataIndex: 'salary', xtype: 'numbercolumn',editor: {//定义字段xtype: 'numberfield',format: '$0,000',allowBlank: false}}]})代码只需:把 CellEditing 改成 RowEditing想要获取修改后的数据,ajax请求服务器,做出响应.复制代码代码如下:grid.on('edit', onEdit, this); //添加编辑事件,获取数据function onEdit(e) {alert(e.record.get('name')); //get()参数是字段名字.}复制代码代码如下:listeners: {load: function(store) {var index = 0;store.each(function(record) {if(record.data.column_name == '1') { //column_name 替换成你的列名, '1' 替换成你的值grid.selModel.selectRow(index,true);}index++;})}}。
Ext JS 4.0编码规范
Ext JS 4.0编码规范Ext JS 4.0 Conventions编者:王宁 Smiles Van目录Ext JS 4.0编码规范 (1)Ext JS 4.0 Conventions (1)1. 环境Requirements (2)1) 浏览器Web Browsers (2)2) 服务器Web Servers (2)2. 目录结构Application Structure (2)1) 基础路径Base Path (2)2) 开发目录结构Dir Structure for Development (2)3) 页面引用类库Reference to Ext JS Library (3)3. 命名规范Naming Conventions (4)1) 类系统Class System (4)2) 命名规范Naming Conventions (4)4. 实践Hands‐on (6)1. 声明Declaration (6)2. 配置Configuration (7)3. 静态成员Statics (8)4. 错误处理和调试Error Handling & Debugging (8)5. 参考 (9)1.环境Requirements1)浏览器Web Browsers●支持主流浏览器●最佳调试浏览器列表:⏹Google Chrome 10+⏹Apple Safari 5+⏹Mozilla Firefox 4+ with the Firebug2)服务器Web Servers●主流HTTP Server2.目录结构Application Structure1)基础路径Base Path/dir/to/js/extjs根据项目指定,J2EE Web工程一般在webapp目录建立相关静态文件目录,例如:●projectname/src/main/webapp/static/●projectname/src/main/webapp/js/等。
ExtJs4笔记(9)Ext.Panel面板控件、Ext.window.Window窗口控。。。
ExtJs4笔记(9)Ext.Panel⾯板控件、Ext.window.Window窗⼝控。
本篇讲解三个容器类控件。
⼀、⾯板控件 Ext.Panel⼀个⾯板控件包括⼏个部分,有标题栏、⼯具栏、正⽂、按钮区。
标题栏位于最上⾯,⼯具栏可以在四个位置放置,围绕中间部分正⽂,按钮区位于最⼩⽅。
下⾯介绍⼏个基本配置项:1.title:设置⾯板标题⽂本。
2.tbar,lbar,rbar,bbar:分别设置上、左、右、下四个部位的⼯具栏。
3.html,items:前者⽤来设置正⽂部分的html,后者设置正⽂部分的ext控件。
4.buttons:设置按钮区的按钮。
下⾯看看⾯板⽣成代码:[html]<h1>Panel</h1><div id="div1" class="content"></div>[Js]Ext.onReady(function () {var p = Ext.create('Ext.Panel', {title: '⾯板标题',collapsible: true,renderTo: 'div1',width: 400,height: 300,autoScroll: false,bodyBorder: true,buttonAlign: 'right',buttons: [{text: "按钮1",handler: function () {Ext.Msg.alert("提⽰", "第⼀个事件");},id: "bt1"}, {text: "按钮2",id: "bt2"}],floating: true,footerCfg: { tag: 'span', id: 'span1', html: '⾯板底部' },items: [{xtype: "button",text: "按钮"}],tbar: Ext.create('Ext.toolbar.Toolbar', { items: ["⼯具栏"] }),html: "<b>正⽂</b>"});p.setPosition(40, 50);});效果如下:⼆、窗⼝控件 Ext.window.Window窗⼝控件与⾯板控件基本类似,只不过他看起来像⼀个窗⼝,具备最⼤化,最⼩化,打开关闭、拖动等窗⼝操作,下⾯看看窗⼝⽣成代码:下⾯看看⾯板⽣成代码:[html]<h1>窗⼝</h1><div class="content" style="height:300px"><button id="button1">打开窗⼝</button><div id="win1"></div></div>[Js]Ext.onReady(function () {var window1 = Ext.create('Ext.window.Window', {applyTo: 'win1',layout: 'table', //内部元素布局⽅式{absolute accordion anchor border card column fit form table}width: 500,height: 200,closeAction: 'hide', //窗⼝关闭的⽅式:hide/closeplain: true,title: "窗⼝标题",maximizable: true, //是否可以最⼤化minimizable: true, //是否可以最⼩化closable: false, //是否可以关闭modal: true, //是否为模态窗⼝resizable: false, //是否可以改变窗⼝⼤⼩items: [{text: '按钮',xtype: "button"}, {width: 214,minValue: 0,maxValue: 100,value: 50,xtype: "slider"}, {xtype: "button",text: '⼀个菜单',width: "60px",height: "15px",menu: {items: [new Ext.ColorPalette({listeners: {select: function (cp, color) {Ext.Msg.alert('颜⾊选择', '你选择了' + color + '。
Extjs4.0 配置
Extjs一路走来可谓风光无限!现在的extjs最新版本已经到了4.07,下载地址:/products/extjs现在说下版权问题,商用是要收费的,个人学习研究是免费的GPL3的许可证.其余不多说!现在完之后解压,解压后的目录结构如下图所示:不多说,一步一步来。
环境的搭建:建立web工程(当然本地工程也可以)—>在web目录下新建extjs 目录—>复制extjs4.0的解压文件中bootstrap.js,ext-debug-all.js,ext-all.js以及resource目录到此目录下,目录结构图如下:ok,截止目前为止所有环境ok。
现在开发HelloWorld程序!很简单只是一个HelloWorld!【需求:在页面加载完成的时候alert一个’hello’的信息】现在extjs目录下新建hello.html页面,其内容如下:<html><head><title>extjs-demo–来自的教程</title><link rel="stylesheet" type="text/css"href="resources/css/ext-all.css"/><script type="text/javascript" src="bootstrap.js"></script></head><body></body></html>在此简单解释,ext-all.css是extjs通用的css文件。
extjs本身的所有css 样式都在这里面定义,bootstrap.js文件用来加载extjs的相应js文件,其能根据是开发环境还是生产环境进行动态加载。
其在如下代码完成配置:isDevelopment = null 默认的’isDevelopment ‘是null值,如果是null则加载的是ext-all-debug.js原因如下:if (queryString.match(‘(\\?|&)debug’) !== null) {isDevelopment = true;}else if (queryString.match(‘(\\?|&)nodebug’) !== null) {isDevelopment = false;}document.write(‘<script type="text/javascript" src="’ + path +‘ext-all’ + ((isDevelopment) ? ‘-debug’ : ”) + ‘.js"></script>’);以上代码还算简单,不多费口舌了。
Ext4.0--在应用中使用Ext Loader
7 < script type = " text/javascript " src = " js/MyApp/app.js " >
8 < /head >
9 < body >
10 < /body >
11 < /html >
index.html文件中需要使用link标记包含ExtJS 4的样式文件。包含ext-debug.js文件的javascript标记可能要修改多次,ext-all-debug.js文件是开发调试用的,而ext-all.js则是在发布产品时使用的。
ext-all.js ;压缩后的完整版本,文件比较小。使用该版本调试很困难,因此一般在发布产品时才使用。
ext-debug.js : 该文件只包含ExtJS基础架构和空的结构。使用该文件,可以实现ExtJS类文件的远程加载,而且提供了很好的调试体验,不过代价是相当的慢。
ext.js : ext-debug.js的压缩版本。
1 Ext . define ( ' MyApp . views . UsersGridPanel ' , {
2 extend : ' Ext . grid . Panel ' ,
3 alias : ' widget . UsersGridPanel ' ,
4 requires : [ ' MyApp . stores . UserStore ' ,
在开始编码前,首先要确定目录结构,以下是使用命名空间组织的文件夹:
从上图可以看到,MyApp目录已经按照命名空间进拆分成几个目录。在完成开发的时候,我们的应用将会有一个如下图所示的内部依赖运行模型。
Extjs4.0可编辑窗口
EXTJS4.0 gridpanel 用法笔记~~可编辑的grid varCellEditing = Ext.create('Ext.grid.plugin.CellEditing', { // 列编辑模式 clicksToEdit : 1, //单击编辑单元格修改autoCancel : false});varRowEditing = Ext.create('Ext.grid.plugin.RowEditing', { // 行编辑模式clicksToMoveEditor : 1, //双击编辑整行修改autoCancel : false});Ext.define('cmodel', { //编辑状态下,状态列的下拉菜单的model extend : 'Ext.data.Model',fields : [ {name : 'STATE',type : 'string'} ]});var states = [ { //编辑状态下,状态列的下拉菜单的data"STATE" : "0"}, {"STATE" : "1"}, {"STATE" : "2"} ]varcstore = Ext.create('Ext.data.Store', { //编辑状态下,状态列的下拉菜单的store model : 'cmodel',data : states});Ext.define('model', { //表格Modelextend : 'Ext.data.Model',fields : [ {name : 'ID',type : 'string'}, {name : 'TIME',type : 'date',dateFormat : 'Y-m-d'}, {name : 'STATE',type : 'string'} ]});var store = Ext.create('Ext.data.Store', { //表格storemodel : 'unitun',proxy : {type : 'ajax',url : '',reader : {type : 'json',root : 'root'}}});// 创建机组表格var grid = Ext.create('Ext.grid.Panel', {region : 'center',store : store,width : document.body.clientWidth - 200,columnLines : true, //true为显示列的分割线layout : { //layout样式用法和swing差不多,常用的就是border. 这里的hbox用在列宽度的设定应该是最好的. flex:1表示一份type : 'hbox',align : 'stretch'},columns : [ {header : '编号',flex : 1,sortable : true,editor : {allowBlank : false //是否允许为空,默认编辑状态下都是文本框,如果需要别的,需指定xtype类型,见时间和状态列},dataIndex : 'ID'}, {header : '时间',flex : 1,sortable : true,renderer : Ext.util.Format.dateRenderer('Y-m-d'), //指定时间的转换格式field : {xtype : 'datefield', //指定编辑状态下为日期类型allowBlank : false, //是否为空editable : false, //是否可以输入format : 'Y-m-d',maxvalue : Ext.Date.format(new Date(), 'Y-m-d') //设定最大值为当前时期.最小为minvalue 默认为value.输入必须符合日期类型},dataIndex : 'TIME'}, {header : '状态',flex : 1,sortable : true,editor : {xtype : 'combobox', //指定编辑状态下为下拉菜单store : state, //绑定下拉菜单数据源editable : false, //是否可以输入displayField : 'STATE',queryMode : 'local', //local指定为本地数据如果是后台传输值为remoteallowBlank : false},dataIndex : 'STATE'} ],plugins : [ CellEditing ], //绑定编辑对象 viewConfig : {forceFit : true,scrollOffset : 0}});。
ext4.0ch01
ext4.0ch01第1章认识ExtJSExtJS是⽤JavaScript、CSS和HTML等技术实现的主要⽤于创建⽤户界⾯,且与后台技术⽆关的前端Ajax框架,还被⽤来开发RIA(富客户端)的Web应⽤。
ExtJS的UI组件模型和开发理念继承⾃Yahoo⽤户组件库YUI和Java平台上的Swing,它为开发者屏蔽了⼤量的Web UI操作以及跨浏览器⽅⾯的处理。
ExtJS要⽐开发者直接针对DOM和W3C对象模型开发Web UI快速⽽且轻松许多。
⽆论是从Web UI界⾯美观丰富上,还是从功能强⼤完善上来看,ExtJS都可算得上是Web UI组件库⽅⾯的佼佼者,也是⼀款不可多得的JavaScript客户端技术的精品之作。
本章内容提⽰:ExtJS的精彩表现ExtJS的前世今⽣是否真的需要学习ExtJSExtJS 4.0新特性ExtJS UI组件基础了解⼀下类似技术1.1 ExtJS的精彩表现“百闻不如⼀见”,这话对软件开发相关技术来说同样适⽤,特别是对于以UI闻名于世的ExtJS来说,实践将好过任何语⾔的描述。
⽽在所有ExtJS的UI组件中,Grid组件是使⽤最频繁、功能最复杂,同时也是实现最好的。
先来见识⼀下这个“⽆论是界⾯之精美,还是功能之强⼤”都⽆⼈能出其右的Grid组件吧!如图1-1所⽰,这就是ExtJS的Grid组件的⼀个展⽰效果。
从图中可以看出,Grid组件的界⾯基本上和桌⾯程序的Grid组件⼀样;从图上也能看出该组件的⼀些功能,在功能上相对于桌⾯程序的Grid组件,ExtJS的Grid组件也毫不逊⾊。
单选⾏、多选⾏,⾼亮显⽰选中的⾏,拖曳改变列宽度,按列排序,这些只能算Grid组件的基本功能。
⾃动⽣成⾏号,⽀持checkbox全选,动态选择显⽰哪些列,⽀持本地以及远程分页,可以对单元格按照⾃⼰的想法进⾏渲染,这些应该算⼀个功能较强的Grid组件应该拥有的功能,ExtJS的Grid组件也都拥有。
一个面向ExtJS框架的代码自动生成系统的实现及应用的开题报告
一个面向ExtJS框架的代码自动生成系统的实现及应用的开题报告一、选题背景及意义随着互联网技术的不断发展,Web应用程序已经成为计算机应用领域的重要组成部分。
而前端开发框架的出现,更是让Web应用程序的开发变得更加高效、快捷与规范。
其中,ExtJS框架作为一款优秀的前端开发框架,越来越受到开发者的关注。
但是,目前ExtJS框架的开发仍然需要耗费大量的时间和精力,而且在开发过程中往往需要编写大量的重复性代码,极大浪费了开发者的时间和精力。
基于此,开发一个面向ExtJS框架的代码自动生成系统,在一定程度上可以解决这一问题,提高开发效率和代码质量,对于Web应用程序的开发和推广有着重要的意义。
二、研究目标和内容本文的目标是实现一个面向ExtJS框架的代码自动生成系统,主要包括以下内容:1. 分析ExtJS框架中的常用组件和特性,确定需要自动生成的代码类型;2. 设计代码自动生成的算法和规则,实现代码的自动生成;3. 开发代码自动生成系统,实现代码生成和修改;4. 进行实验和评估,测试系统的效果和实用性。
三、研究方法和技术路线本文所选用的主要研究方法是软件工程方法和机器学习方法。
其中,软件工程方法主要用来设计系统的架构和实现系统的功能,机器学习方法主要用来优化系统的效果和提高系统的准确性。
具体的技术路线如下:1. 分析ExtJS框架的特点和常用组件,确定代码生成的规则和类型;2. 设计自动生成代码的算法和函数,采用Java语言实现;3. 设计系统的接口和用户界面,实现代码生成和修改功能;4. 收集数据,进行模型训练和测试,优化算法和函数;5. 进行实验和评估,测试系统的效果和实用性;6. 撰写论文,总结研究成果和经验。
四、预期成果本文的预期成果是一个完整、稳定和高效的面向ExtJS框架的代码自动生成系统,能够为Web应用程序的开发者提供便捷的代码生成和修改功能。
同时,本文还将提供一个符合实际需要和技术要求的代码自动生成算法和函数,为相关领域的研究提供新的思路和方法。
C#中运用EXT组件的代码详解
C#中运用EXT组件的代码详解对于一个完整的页面的实现,往往体现了前台与后台的交互,前台用户发出请求,在后台进行相应的处理,将所请求的内容返回到前台,进行展示给用户界面。
首先,我们来看看前台,页面的显示我们是用到EXT所封装的js文件的框架,主要的内容则是从后台传回来的数据;其代码如下:var studentstore = Ext.create('Ext.data.Store',{ fields://配置数据源的列['stuid','stuname','s_id','stupassword','tel','qqnum'],//在后台返回的每一行数据都要有这些列属性pageSize: 3,//数据分页proxy://用于向后台发起请求{type: 'ajax',actionMethods: { read: 'POST' },url: '/Admin/kaoqin',//请求后台地址(即控制器中的方法)reader: {//解析器type: 'json',root: 'limit',//后台要有该变量也要是json类型的totalProperty: 'total' //后台也要有该变量,即多少条数据}}});studentstore.load({params: { start: 0, limit: 3 }//传递第一次要显示的数据变量})在这段代码中,我们首先定义一个数据源(studentstore),这是EXT组件中的格式,在这个数据源中,含有一些EXT组件的属性,如field(字段)、pagesize(后台每次传回数据的条数)以及数据代理机制(proxy)等,在field里面,主要是数据库中表的行列名;在proxy中定义前台的请求是通过ajax方式,并且数据的传递是通过post方式进行传递,找到了后台控制器的地址(Action),render是解析器,定义了后台传递来的数据是以Json数组的形式传递,root是获取后台传递过来的数据,totalProperty是一次传递过来的数目;后面就是页面的刷新设置了,params: { start: 0, limit: 3 }意思是显示表中的前三条语句;代码:var viestudent = new Ext.grid.Panel({title: '学生信息查询',name: 'student',store: studentstore,//这里配置的是数据源,必须配置columns: [{ //表格列的配置,也要配置header: '学号',dataIndex: 'stuid' //这个stuid必须和数据源studentstore中fields中的stuid一样},{header: '姓名',dataIndex: 'stuname'},{header: '编号',dataIndex: 's_id'},{header: '电话号码',dataIndex: 'tel'},{header: 'QQ号码',dataIndex: 'qqnum'},{header: '密码',dataIndex: 'stupassword'}, {header: '修改',width: 50,/* dataIndex:'stupassword' */}],autowidth: true,autoHeight: true,loadMask: { msg: '拼命加载中....' },bbar: { xtype: 'pagingtoolbar',//这里配置的是分页所在工具栏store: studentstore,pageSize: 3,displayInfo: true,displayMsg: '显示第 {0} 条到 {1} 条记录,一共 {2} 条',emptyMsg: '没有记录'/*,plugins: Ext.create('Ext.ux.SlidingPager', {})*/},buttonAlign: 'left',buttons: [{text: '刷新',handler: function () {//该配置是要用于执行函数studentstore.reload();}}],renderTo: Ext.getBody()//配置要显示的地址,也可以让它显示在一个Div里});这段代码是界面展示的主体部分。
ExtJS4MVC模式入门级开发案例李坏博客
ExtJS4MVC模式入门级开发案例李坏博客
在写完ExtJS MVC模式案例系列文章之后,考虑到各位ExtJS新手朋友们对源码需求强烈,李坏今天重新整理一份更为完善的ExtJS MVC入门级开发案例(上个案例由于当时写的仓促,有些地方写的不是太好,不再提供源码,ExtJS的新手朋友们可以参考本案例作为参考),希望对大家学习ExtJS能够提供帮助。
本文专为ExtJS的新手朋友制作,高手绕行。
有图有真相,最后实现的效果图如下:
案例实现的功能介绍:
1.完美应用ExtJS border布局,效果见上图;
2.实现TreePanel右键菜单,效果如下图:
3.动态更改TreePanel节点名称,效果如下:
修改后的结果如下:
4.实现ExtJS页面之间传参(详细请参看代码)
5.如何在controller中给页面添加监听事件
6.点击树形节点,切换页面
作为一个ExtJS的自学以及使用者,李坏觉得这是一个非常好的ExtJS MVC模式开发的入门级案例,用到了几乎所有的ExtJS的基础性知识。
如果大家对案例有任何疑问,欢迎各位留言或加Q与李坏交流!源码下载。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
['E.I. du Pont de Nemours and Company', 40.48, 0.51, 1.28,
'9/1 12:00am'],
['Exxon Mobil Corp', 68.1, -0.43, -0.64, '9/1 12:00am'],
}],
data : myData
});
// create the Grid
grid = Ext.create('Ext.grid.Panel', {
border : false,
// disabled:true,
tbar:[
sortable : true,
renderer : pctChange,
dataIndex : 'pctChange'
}]
}, {
text : 'Last Updated',
width : 85,
['苛无可奈何花落去 柘城村夺', 31.61, -0.48, -1.54, '9/1 12:00am'],
['式村要堙霜要要寺', 75.43, 0.53, 0.71, '9/1 12:00am'],
['茜要柑地茜苦枯佛挡杀佛 枯地桂林', 67.27, 0.92, 1.39, '9/1 12:00am'],
sortable : true,
renderer : Ext.util.Format.dateRenderer('m/d/Y'),
dataIndex : 'lastChange'
}],
// height : 350,
// width : 600,
*
* @param {Object}
* val
*/
function pctChange(val) {
if (val > 0) {
return '<span style="color:green;">' + val + '%</span>';
} else if (val < 0) {
return '<span style="color:red;">' + val + '%</span>';
}
return val;
}
// create the data store
var store = Ext.create('Ext.data.ArrayStore', {
['Honeywell Intl Inc', 38.77, 0.05, 0.13, '9/1 12:00am'],
['Intel Corporation', 19.88, 0.31, 1.58, '9/1 12:00am'],
['International Business Machines', 81.41, 0.44, 0.54,
// title : 'Grouped Header Grid',
// renderTo : 'grid-example',
viewConfig : {
stripeRows : true
}
});
Ext.get('redis').on('click', function() {
width : 75,
sortable : true,
renderer : change,
dataIndex : 'change'
}, {
text : '% Change',
width : 75,
['Merck & Co., Inc.', 40.96, 0.41, 1.01, '9/1 12:00am'],
['Microsoft Corporation', 25.84, 0.14, 0.54, '9/1 12:00am'],
['Pfizer Inc', 27.96, 0.4, 1.45, '9/1 12:00am'],
['United Technologies Corporation', 63.26, 0.55, 0.88,
'9/1 12:00am'],
['Verizon Communications', 35.57, 0.39, 1.11, '9/1 12:00am'],
['Wal-Mart Stores, Inc.', 45.45, 0.73, 1.63, '9/1 12:00am']];
{
iconCls:'add16',
text:'删 除',
menu: [{text: '删除选中'},
{text: '删除所有'}
],
tooltip:'删除'
},'-',{
iconCls:'adds',
text:'新 建'
text : 'Price',
width : 75,
sortable : true,
renderer : 'usMoney',
dataIndex : 'price'
}, {
text : 'Change',
type : 'float'
}, {
name : 'pctChange',
type : 'float'
}, {
name : 'lastChange',
type : 'date',
dateFormat : 'n/j h:ia'
run : function() {
Ext.get('showTime').update('<div style="float:left;width:32;margin-top:16px;"><img src="img/time-1.png" width="24" height="24"/></div><div style="padding-top:20px;margin-right:2px;">'+Ext.util.Format.date(new Date(),
grid.setDisabled(false);
})
}
// ----------------------------------------//////////
Ext.onReady(function() {
// 建立 一个动态时间显示功能
var nowTime = {
width : 40
}, {
text : 'Company',
flex : 1,
sortable : false,
dataIndex : 'company'
}, {
text : 'Stock Price',
columns : [{
'9/1 12:00am'],
['Johnson & Johnson', 64.72, 0.06, 0.09, '9/1 12:00am'],
['JP Morgan & Chase & Co', 45.73, 0.07, 0.15, '9/1 12:00am'],
['McDonald\'s Corporation', 36.76, 0.86, 2.40, '9/1 12:00am'],
autoLoad : true,
fields : [{
name : 'company'
}, {
name : 'price',
type : 'float'
}, {
name : 'change',
} else if (val < 0) {
return '<span style="color:red;">' + val + '</span>';
}
return val;
}
/**
* Custom function used for column renderer