进阶篇(2)-ExtJs中的Window对象与FormPanel详解
- 格式:ppt
- 大小:1.42 MB
- 文档页数:26
简述window对象window对象是Windows操作系统中最基本的用户界面元素之一,也是JavaScript语言中最常用的对象之一。
它是一个窗口对象,可以访问操作系统创建的Windows窗口,包括文本框、按钮、标签、菜单等控件。
以下是window对象的一些基本信息和用法:1. 基本属性window对象有以下几个基本属性:- 窗口标题(title):显示在窗口标题栏上的标题字符串。
- 窗口大小(width):窗口的宽度。
- 窗口高度(height):窗口的高度。
- 窗口位置(position):窗口在屏幕上的相对位置。
- 默认可见性(default visibility):如果窗口没有显式,则默认隐藏。
- 边框宽度(border width):窗口的边框宽度。
- 背景色(background color):窗口的背景色。
- 状态(status):窗口的状态,包括正在被使用时的显示状态和关闭时的隐藏状态。
2. 方法window对象有以下方法:- 显示(show):将窗口显示出来,如果窗口处于隐藏状态,则显示窗口标题。
- 隐藏(hide):将窗口隐藏起来,如果窗口处于显示状态,则隐藏窗口标题。
- 最大化(maximize):将窗口最大化,使其占据整个屏幕。
- 最小化(minimize):将窗口最小化,使其缩放到屏幕的右下角。
- 恢复(re还原):将窗口恢复到默认状态,如果窗口处于最小化状态,则恢复窗口标题。
- 移动(move):将窗口向上、向下、向左、向右移动,如果窗口处于固定状态,则只移动窗口标题。
- 旋转(rotate):将窗口旋转90度或270度,如果窗口处于固定状态,则只旋转窗口标题。
- 滚动(scroll):将窗口向上、向下、向左、向右滚动,如果窗口处于固定状态,则只滚动窗口标题。
- 关闭(close):关闭窗口,如果窗口处于显示状态,则关闭窗口标题。
- 显示消息(display message):在窗口中显示一条消息,可以显示文本、图像、链接等。
ExtJS—表单与输入控件表单在EXT中非常受欢迎,初看这些输入控件,好像只是修改了CSS样式而已,但是如果用Firebug查看一下DOM,似乎确实只有CSS发生了变化,隐藏在漂亮界面下的依然是原来的input控件,如果你想使用EXT提供的一些绚丽的功能,建议尝试EXT的表单(Form)和对应的输入控件。
本文就是简单介绍表单与输入控件的使用方法。
一、创建一个简单的表单1、具体配置信息参考上篇文章2、创建简单表单的实现代码如下所示:view plaincopy to clipboardprint?1.<mce:script type="text/javascript"><!--2.Ext.onReady(function(){3.var form=new Ext.form.FormPanel({4.defaultType:'textfield',belAlign:'right',6.title:'form',belWidth:50,8.frame:true,9.width:220,10.items:[{11.fieldLabel:' 文本框'12.}],13.buttons:[{14.text:'按钮'15.}]16.});17.form.render("div1");18.});19.20.// --></mce:script>3、注意HTML中无需定义太多东西,只需要定义个div id='div1'就可以实现,初始配置显然变得更紧凑,利用items和buttons指定包含的控件和按钮。
具体实现效果如图1所示。
图1 简单的表单二、FormPanel和BasicForm详解如上面的实例所示,我们需要定义一个Ext.form.FormPanel,然后在里面设置field,引入Ext.form.For mPanel 的最大好处就是利于布局,Ext.form.FormPanel继承了Ext.Panel,作为一个Panel,我们可以把Ext.form.FormPanel放到Ext.Viewport中作为整个页面布局的一部分,同时也可以利用items指定Ext.form.FormPanel内部的子组件。
学习ExtJs笔记Grid表格1、添加数据的时候,将数据的属性设置为dirty。
因为在使用Ajax提交数据的时候,非dirty的数据不会自动保存到store的modifield属性中。
2、保存数据:(1)store.modifield.slice(start,end);作用:返回一个新数组,取得从start到end的所有元素,但不包括end元素。
如果参数只有一个0,则表示取得全部的数据;(2)each(m,function())(m为一个数组),该方法主要作用是遍历数组m中的每一条记录,并且每条记录都按照function()方法进行处理。
不可在function方法里面加上循环,否则,将出现多重结果。
(3)listeners监听器:listeners: {"afterEdit": {fn: afterEdit,scope: this} }作用:监听afterEdit。
当单元格编辑完成或者退出编辑状态,自动调用fn方法,作用的范围是当前页面。
(4)当添加数据成功后,新添加的数据有三角行的标识,要除掉标识,可用Record 的commit方法。
3、读取数据(1)从Txt文件中读取数据将读取的数据编码eval(response.responseText),否则将不能正确读取数据。
(2)设置记录的字段的值var initValue = {name:'',gender:'',age:''};var p = new Record(initValue);p.set('name',data_get[i].name);p.set('gender',data_get[i].gender);p.set('age',data_get[i].age);Tree 树1、Tree的加载使用方法render。
Tree.render()方法将tree加载到tree的‘el’中。
var detialIframe=document.all("detialIframe");此处的IFrame是从document取得的,即作作为document的子对象出现,虽然是文档(document)对象,但由于它是独立的页面,因而拥有自己的事件,拥有自己的窗口对象(contentWindow); Window.detialIframe 或Window.frames(detialIframe)将直接取得IFrame的Window对象IFRAMEIFRAME 元素也就是文档中的文档window 对象浏览器会在其打开一个 HTML 文档时创建一个对应的 window 对象。
但是,如果一个文档定义了一个或多个框架(即,包含一个或多个 frame 或 iframe 标签),浏览器就会为原始文档创建一个 window 对象,再为每个框架创建额外的window 对象。
这些额外的对象是原始窗口的子窗口,可能被原始窗口中发生的事件所影响。
例如,关闭原始窗口将导致关闭全部子窗口。
如果想要创建新窗口(以及对应的 window 对象),可以使用像 open, showModalDialog 和showModelessDialog 这样的方法。
contentWindowcontentWindow属性是指指定的frame或者iframe所在的window对象在IE中iframe或者frame的contentWindow属性可以省略,但在Firefox 中如果要对iframe对象进行编辑则必须指定contentWindow属性。
function EnableEdit(){var editor;editor = document.getElementById("HtmlEdit").contentWindow;// 针对IE浏览器, make it editableeditor.document.designMode = 'On';editor.document.contentEditable = true;// For compatible with FireFox, it should open and write something to make it workeditor.document.open();editor.document.writeln('<html><head>');editor.document.writeln('<style>body {background:white;font-size:9pt;margin: 2px; padding: 0px;}</style>');editor.document.writeln('</head><body></body></html>');editor.document.close();}<iframe ID="HtmlEdit" MARGINHEIGHT="1" MARGINWIDTH="1" width="100%" height="312"></iframe><html><body><script>var ifr = document.createElement("iframe");document.body.appendChild(ifr);var ifrdoc = ifr.contentWindow.document;var s = fixingHTB.innerHTML; //进入可编辑模式前存好ifrdoc.designMode = "on"; //文档进入可编辑模式ifrdoc.open(); //打开流ifrdoc.write(s);ifrdoc.close(); //关闭流ifrdoc.designMode ="off"; //文档进入非可编辑模式</script></body></html>document.designMode的功能与使用方法介绍将文档设置为设计模式要将整个文档设置为设计模式,可以对文档对象本身设置designMode 属性。
window对象方法Window对象是JavaScript中的全局对象,提供了许多方法来操作与浏览器窗口相关的功能。
下面是几个常用的Window对象方法的介绍:1. alert()方法:该方法用于显示一个带有一段消息和一个确认按钮的警告框。
通过调用alert()方法,可以向用户提供一些必要的信息或警告。
2. confirm()方法:该方法用于显示一个带有一段消息、确认按钮和取消按钮的确认框。
用户点击确认按钮后,confirm()方法返回true;用户点击取消按钮后,confirm()方法返回false。
可以利用该方法获取用户的选择,并根据选择做出不同的处理。
3. prompt()方法:该方法用于显示一个带有消息、输入框和确认按钮的对话框,接受用户输入。
用户可以在输入框中输入文本,并点击确认按钮提交输入的内容。
prompt()方法返回用户输入的内容。
可以利用该方法获取用户的输入,并进行后续的操作。
4. open()方法:该方法用于打开一个新的浏览器窗口或者一个新的标签页。
可以指定打开页面的URL、窗口的大小、位置以及其他属性。
open()方法返回一个代表新窗口的Window对象,可以对该窗口进行进一步的操作。
5. close()方法:该方法用于关闭一个浏览器窗口或者一个标签页。
可以通过调用close()方法关闭当前窗口。
除了上述介绍的方法,Window对象还提供了许多其他方法,例如setTimeout()和setInterval()用于定时执行代码,以及location对象相关的方法用于获取或设置当前窗口的URL等。
总结来说,Window对象的方法可以方便地与浏览器窗口进行交互,提供了丰富的功能来展示信息、获取用户输入以及控制窗口的打开和关闭等操作。
在开发Web应用程序时,可以根据需求灵活使用这些方法,以提升用户体验和增强交互性。
ExtJS之FormPanel详细参数和公共事件一、FormPanel详细参数介绍1、layout : String此容器所使用的布局类型。
如不指定,则使用缺省的yout.ContainerLayout 类型。
当中有效的值可以是:accordion、anchor、border、cavd、column、fit、form 和table。
针对所选择布局类型,可指定#layoutConfig 进一步配置。
2、layoutConfig : Object选定好layout 布局后,其相应的配置属性就在这个对象上进行设置。
(即与#layout 配置联合使用)有关不同类型布局有效的完整配置信息,参阅对应的布局类:yout.Absoluteyout.Accordionyout.AnchorLayoutyout.BorderLayoutyout.CardLayoutyout.ColumnLayoutyout.FitLayoutyout.FormLayoutyout.TableLayout3、bufferResize : Boolean/Number当设置为true(100 毫秒)或输入一个毫秒数,为此容器所分配的布局会缓冲其计算的频率和缓冲组件的重新布局。
如容器包含大量的子组件或这样重型容器,在频繁进行高开销的布局时,该项尤为有用。
4、activeItem : String/Number组件id 的字符串,或组件的索引,用于在容器布局渲染时候的设置为活动。
例如,activeItem: 'item-1'或activeItem: 0 index 0 = 容器集合中的第一项)。
只有某些风格的布局可设置activeItem(如yout.Accordion、yout.CardLayout 和yout.FitLayout),以在某个时刻中显示一项内容。
相关内容请参阅yout.ContainerLayout#activeItem。
js中的window对象的用法JavaScript 中的 window 对象是浏览器的全局对象,它包含了浏览器窗口的所有内容,可以用来操作和控制浏览器窗口的各种属性和方法。
下面是一些常用的 window 对象的用法和功能介绍。
1.访问和操作浏览器窗口的属性:- window.innerWidth / window.innerHeight:获取浏览器窗口的内部宽度和高度。
- window.outerWidth / window.outerHeight:获取浏览器窗口的外部宽度和高度。
- window.location.href:获取或设置当前页面的 URL。
- window.location.reload(:重新加载当前页面。
- window.location.replace(url):用指定的 URL 替换当前页面。
- window.location.assign(url):加载指定的 URL。
- window.history.back( / window.history.forward(:在浏览器历史记录中后退或前进一页。
2.操作浏览器窗口:- window.close(:关闭当前窗口。
3.弹出对话框:- window.alert(message):显示带有一段消息和一个确认按钮的警告框。
- window.confirm(message):显示带有一段消息、确认按钮和取消按钮的对话框。
- window.prompt(message, defaultText):显示带有一段消息、输入框和确认按钮的对话框。
4.定时器和延时执行:- window.setTimeout(function, delay):在指定的延迟时间后执行给定的函数。
- window.setInterval(function, interval):按照指定的时间间隔重复执行指定的函数。
5.监听和响应用户事件:- window.onclick / window.ondblclick:当用户单击或双击鼠标时触发。
ExtJs2.0学习系列(1)--Ext.MessageBox大家都知道,刚开始搞extjs的时候,很是有点困难,所以本人在新手刚入门后准备了这个系列的文章.个人认为用extjs做后台很不错,布局比较完美!1.Ext.MessageBox.alert()有四个参数,为简单起见,主要介绍前面三个参数:alert( title , msg , function(){} );其中title,msg为必选参数,function为可选参数,在关闭弹出窗口后触发.【注意】Ext.MessageBox.alert("title","msg",function(e){alert("按钮的值:"+e);});参数e: 两种值 (ok,cancel).2.Ext.MessageBox.confirm()基本上同 alert() 方法一模一样.【注意】Ext.MessageBox.confirm("title","msg",function(e){alert("按钮的值:"+e);});参数e:三种值(yes,no,cancel).3.Ext.MessageBox.prompt()有六个参数,比前面alert方法多一个返回值和是否多行.Ext.MessageBox.prompt("title","msg");【注意】e是按钮返回值,text是文本框中的输入内容,true为多行,this表示作用域4.Ext.MessageBox.show()功能很强大,采用config配置形式,比前面的方法使用更方便.参数很多,在此列举最常用的配置参数:a)animEl:对话框弹出和关闭时的动画效果,比如设置为”id1”,则从id1处弹出并产生动画,收缩则相反;b)buttons:弹出框按钮的设置,【Ext.Msg.OK】【Ext.Msg.OKCANCEL】【Ext.Msg.CAMCEL】【Ext.Msg.YESNO】【Ext.Msg.YESNOCANCEL】可以自定义按钮上面的字:{"ok","我本来是ok的"},若设为false,则不显示任何按钮,默认为false.c)closable:如果为false,则不显示右上角的小叉叉,默认为true;d)msg:消息的内容;e)title:标题;f)fn:关闭弹出框后执行的函数;g)icon:弹出框内容前面的图标,【】【Ext.MessageBox.ERROR】【Ext.MessageBox.WARNING】【Ext.MessageBox.QUESTION】h)width:弹出框的宽度,不带单位;i)prompt:设为true,则弹出框带有输入框,默认为false;j)multiline:设为true,则弹出框带有多行输入框k)progress:设为true,显示进度条,(但是是死的)l)progressText:显示在进度条上的字m)wait:设为true,动态显示progress5.Ext.MessageBox.show()中的进度条的使用首先必须知道另外两个方法 Ext.MessageBox.hide()和Ext.MessageBox.updateProgress(value,"ProgressText","msg")(三个参数,看名字就知道意思), 【注意】value为0-1之间的数,表示进度条的进度.第一种:(通过进度的大小控制进度,满进度为1)Ext.get("btn1").on("click",function(){Ext.MessageBox.show({title:"df",msg:"dfd",progress:true,width:300,closable:true});var f=function(v){return function(){if(v==12) {Ext.MessageBox.hide();}Else{var i=v/11;Ext.MessageBox.updateProgress(i,Math.round(100*i)+"% completed",i);}}}for(var i=1;i<13;i++){setTimeout(f(i),i*500);//从点击时就开始计时,所以500*i表示每500ms就执行一次}});第二种:(通过固定时间控制进度加载)最后关于那个waitConfig的参数,在此说明下:a)interval:进度的频率b)duration:执行进度的持续时间,超过这个时间后,interval失效,不再产生进度效果,但进度狂也不会消失.c)fn:duration的时间到后执行的函数所以,上面的通过时间控制进度另外一种写法为:Ext.get("btn1").on("click",function(){Ext.MessageBox.show({title:"时间进度条",msg:"5s后关闭进度框",progress:true,width:300,wait:true,waitConfig:{interval:600,duration:5000,fn:function(){Ext.MessageBox.hide();//让进度条消失}},closable:true});//setTimeout(function(){Ext.MessageBox.hide()},5000);});ExtJs2.0学习系列(2)--Ext.Panel今天介绍 extjs 中的 Panel 组件.因为panel组件的子类组件包括TabPanel,GridPanel,FormPanel,TreePanel 组件,所以非常有必要介绍Panel组件的配置参数和相关的属性、方法.//配置参数(只列举部分常用参数)a)autoLoad:有效的url字符串,把那个url中的body中的数据加载显示,但是可能没有样式和js控制,只是html数据b)autoScroll:设为true 则内容溢出的时候产生滚动条,默认为falsec)autoShow:设为true显示设为"x-hidden"的元素,很有必要,默认为falsed)bbar:底部条,显示在主体内, //代码:bbar:[{text:'底部工具栏bottomToolbar'}]e)tbar:顶部条,显示在主体内, //代码:tbar:[{text:'顶部工具栏topToolbar'}]f)buttons:按钮集合,自动添加到footer中(footer参数,显示在主体外)// 代码 :buttons:[{text:"按钮位于footer"}]g)buttonAlign:footer中按钮的位置,枚举值为:"left","right","center",默认为righth)collapsible:设为true,显示右上角的收缩按钮,默认为falsei)draggable:true则可拖动,但需要你提供操作过程,默认为falsej)html:主体的内容k)id:id值,通过id可以找到这个组件,建议一般加上这个id值l)width:宽度m)height:高度n)title:标题o)titleCollapse:设为true,则点击标题栏的任何地方都能收缩,默认为false.p)applyTo:(id)呈现在哪个html元素里面q)contentEl:(id)呈现哪个html元素里面,把el内的内容呈现r)renderTo:(id)呈现在哪个html元素里面// 关于这三个参数的区别(个人认为:applyTo和RenderTo强调to到html元素中,contentEl则是html元素到ext组件中去);关于contentEl有资料如下:ContentEl - This config option is used to take existing content and place it in the bo dy of a new panel. It is not going to be the actual panel itself. (It will actually copy the innerHTML of the el and use it for the body). You should add either the x-hidden or t he x-hide-display CSS class to prevent a brief flicker of the content before it is render ed to the panel.ApplyTo - This config option allows you to use pre-defined markup to create an entire Panel. By entire, I mean you can include the header, tbar, body, footer, etc. These elements must be in the correct order/hierarchy. Any components which are not found and need t o be created will be autogenerated.RenderTo - This config option allows you to render a Panel as its created. This would be the same as saying myPanel.render(ELEMENT_TO_RENDER_TO);考虑到入门,方法事件会在以后的文章中以实例穿插.1.可拖动的panel实例下面我们做个可拖动panel例子来熟悉下panel这个最基本的组件.但是还不能拖到其他的地方,我们需要改写draggable:实现了可保存的拖动,如图:拖动的时候阴影还在原位置,我们再在draggable中的onDrag事件中添加代码:最后这个可拖动的panel的代码为:var p=new Ext.Panel({title: 'Drag me',x: 100,y: 100,renderTo: Ext.getBody(),floating: true,frame: true,width: 400,height: 200,draggable: {insertProxy: false,onDrag : function(e){var pel = this.proxy.getEl();this.x = pel.getLeft(true);this.y = pel.getTop(true);var s = this.panel.getEl().shadow;if (s) {s.realign(this.x, this.y, pel.getWidth(), pel.getHeight());}},endDrag : function(e){this.panel.setPosition(this.x, this.y);}}})2.带顶部,底部,脚部工具栏的panel我们已经在各种工具栏上添加了按钮,但是却没有激发事件,下面我们来添加按钮事件代码:改写tbar,添加handler句柄,点击顶部工具栏上按钮1,弹出提示框,效果图大家想象下,就不贴出来了当然,一般情况下,我们只要一个工具栏,这里只是为了演示!3.panel工具栏添加下面的代码到panel配置参数中:id的枚举值为:toggle (collapsable为true时的默认值)close minimize maximize restore gear pinunpin right left up down refreshminus plus help search save printExtJs2.0学习系列(3)--Ext.Window介绍window组件,它继承自panel.先介绍个最简单例子参数介绍:因为前面已经介绍了panel组件,下面只介绍window组件的几个其他特别的配置参数//几个前面没有介绍的window自己的配置参数a)closeAction:枚举值为:close(默认值),当点击关闭后,关闭window窗口,关闭后,只是hidden窗口b)closable:true在右上角显示小叉叉的关闭按钮,默认为truec)constrain:true则强制此window控制在viewport,默认为falsed)modal:true为模式窗口,后面的内容都不能操作,默认为falsee)plain://true则主体背景透明,false则主体有小差别的背景色,默认为falsew.show()//需要显示下show()方法,默认的窗口是可拖动的,可关闭的,可拖动大小的实例介绍:1.嵌套了tabpanel的window我们通过items把TabPanel组件嵌套在window的主体中去了.我们再添加工具栏看看其他工具栏方法一样.关于window中嵌套复杂的布局,等我们谈完了extjs布局再举例说明.ExtJs2.0学习系列(4)--Ext.FormPanel之第一式上篇中我们讨论了Ext.window的简单使用,今天我们要看看强大的FormPanel,也是继承panel组件的使用. 首先弄清楚这个问题,创建的时候:Ext.form.FormPanel = Ext.FormPanel;//查看源代码便知,两种方法是一样的我们还是从最简单的代码实例开始吧:<!--html代码--><div id="form1"></div>//js代码var form1 = new Ext.form.FormPanel({width:350,frame:true,//圆角和浅蓝色背景renderTo:"form1",//呈现在哪个控件里title:"FormPanel",bodyStyle:"padding:5px 5px 0",items:[{fieldLabel:"UserName",//文本框标题xtype:"textfield", //表单文本框name:"user",id:"user",width:200},{fieldLabel:"PassWord",xtype:"textfield",name:"pass",id:"pass",width:200}],buttons:[{text:"确定"},{text:"取消",handler:function(){alert("事件!");}}] });都是通过items属性参数把表单元素添加到这个表单中.我们发现两个文本框的类型和宽度是一样的,我们还可以把items里面的相同项提取出来,以简化代码:关于inputType参数(同input类型相同,只列举几个典型的)如下:radio check text(默认) file password等等关于FormPanel的配置参数,请主要参考panel的参数,这里列举另外两个:a)labelAlign:fieldlabel的排列位置,默认为"left",其他两个枚举值是"center","right"b)labelWidth:fieldlabel的占位宽c)method:"get"或"post"d)url:"提交的地址"e)submit:提交函数因为内容太多,我们先看一个例子.1.FormPanel的fieldset应用//把前面代码重写items属性items:[{xtype:'fieldset',title: '个人信息',collapsible: true,autoHeight:true,width:330,defaults: {width: 150},defaultType: 'textfield',items :[{fieldLabel: '爱好',name: 'hobby',value: ''},{xtype:"combo",name: 'sex',store:["男","女","保密"],//数据源为一数组fieldLabel:"性别",emptyText:'请选择性别.'}]}]这里的combox组件只是简单的演示,具体还是要深入了解,我们会在以后的内容中详细探讨.2.关于xtype的类型,在extjs的form表单(其他的请参考api)中已经定义的有:Form componentsa)form Ext.FormPanelb)checkbox Ext.form.Checkboxc)combo boBoxd)datefield Ext.form.DateFielde)field Ext.form.Fieldf)fieldset Ext.form.FieldSetg)hidden Ext.form.Hiddenh)htmleditor Ext.form.HtmlEditori)label belj)numberfield Ext.form.NumberFieldk)radio Ext.form.Radiol)textarea Ext.form.TextAream)textfield Ext.form.TextFieldn)timefield Ext.form.TimeFieldo)trigger Ext.form.TriggerField不早了,FormPanel还有很多的东西要了解,但是今天不能再讲了,太多了,大家都没有兴致看下去,明天继续.extjs的东西很庞大,但是还没有一个人用中文系统的分析写文章,所以资料都很可贵,现在我想做这件事,请大家多多支持,我才有动力.ExtJs2.0学习系列(5)--Ext.FormPanel之第二式3.可选的fieldset实例其实就是带个chechbox,有点像论坛注册时有一部分是选填信息的那种效果,主要知识点:●checkboxToggle:true//true则呈现一个带checkbox的fieldset,选中则展开,否则相反,默认为false●checkboxName:string//当上面为true时,作为checkbox的name,方便表单操作//在上一节的基础代码的items里面添加如下配置{xtype:"fieldset",checkboxToggle:true,//关键参数,其他和以前的一样checkboxName:"dfdf",title:"选填信息",defaultType:'textfield',width:330,autoHeight:true,//使自适应展开排版items:[{fieldLabel:"UserName",name:"user",anchor:"95%"//330px-labelWidth剩下的宽度的95%,留下5%作为后面提到的验证错误提示},{fieldLabel:"PassWord",inputType:"password",//密码文本name:"pass",anchor:"95%"}]}4.表单验证实例(空验证,密码确认验证,email验证)我们可以用单独的js写表单验证,但是extjs已经为我们想到了(自己单独写反而不方便).在验证之前,我不得不提两个小知识点(大家在很多的extjs代码中都看到了这两个,他们都起提示作用的): ●Ext.QuickTips.init(); //支持tips提示●Ext.form.Field.prototype.msgTarget='side';//提示的方式,枚举值为"qtip","title","under","side",id(元素id)//side方式用的较多,右边出现红色感叹号,鼠标上去出现错误提示,其他的我就不介绍了,可自行验证大家可以分别去掉这两行代码,看效果就会明白他们的作用,(放在onReady的function(){}中)✧我们看一个最简单的例子:空验证(其实这不算是一个专门的验证例子)//空验证的两个参数a)allowBlank:false//false则不能为空,默认为trueb)blankText:string//当为空时的错误提示信息js代码为:✧用vtype格式进行简单的验证.在此举邮件验证的例子,重写上面代码的items配置:你可以修改上面的vtype为以下的几种extjs的vtype默认支持的验证:●alpha //只能输入字母,无法输入其他(如数字,特殊符号等)●alphanum//只能输入字母和数字,无法输入其他●email//email验证,要求的格式是langsin@●url//url格式验证,要求的格式是✧确认密码验证(高级自定义验证)前面的验证都是extjs已经提供的验证,我们也可以自定义验证函数,比上面要复杂点了.我们一起做一个密码确认的例子.我们修改前面的代码://先用Ext.apply方法添加自定义的password验证函数(也可以取其他的名字)Ext.apply(Ext.form.VTypes,{password:function(val,field){//val指这里的文本框值,field指这个文本框组件,大家要明白这个意思if(field.confirmTo){//confirmTo是我们自定义的配置参数,一般用来保存另外的组件的id值var pwd=Ext.get(field.confirmTo);//取得confirmTo的那个id的值return (val==pwd.getValue());}return true;}});//配置items参数items:[{fieldLabel:"密码",id:"pass1",anchor:"90%"},{fieldLabel:"确认密码",id:"pass2",vtype:"password",//自定义的验证类型vtypeText:"两次密码不一致!",confirmTo:"pass1",//要比较的另外一个的组件的idanchor:"90%"}]关于vtype的内容还有很多内容要挖掘,但现在我们就点到这里为止,以后有机会再讨论它的其他高级验证.ExtJs2.0学习系列(6)-- Ext.FormPanel之第三式(ComboBox篇)上篇ExtJs2.0学习系列(5)--Ext.FormPanel之第二式中我们讨论了下fieldset和表单验证的知识,今天我们接着深入解析表单元素中ComboBox组件的使用.会涉及到.net简单服务器数据交互,但暂不做深入讨论,以后会详细分析服务器交互相关,不过可能要等较长一段时间,呵呵!5.服务器数据作为ComboBox的数据源实例首先从服务器获取json数据:我们就通过<%=ServerData%>这样的方式获取到了服务器最简单的属性数据.问题来了,js和html怎么调用c#后台的变量和方法?(变量的调用上面刚刚介绍)6.js和html怎么调用c#后台的变量和方法a)js调用c#后台变量,参考上面,注意,如果想获取string类型,请在js里用引号 varstr="<%=ServerData%>"(返回"['湖北','江西','安徽']")b)js调用c#后台方法:c)js调用c#后台带参数的方法boBox的数据源store格式详解在前面的例子里面,我们一直给ComboBox的数据源store赋值一维数组,其实store支持多维和Store.data.Store类型.下面就几种数据以代码举例说明一维数组:["江西","湖北"],值同时赋给ComboBox的value和text二维和多维数组:[["one","bbar","111"],["two","tbar","222"]],第一维和第二维分别赋值给value和text,其他维忽略store类型:包括GroupingStore, JsonStore, SimpleStore.我们分三步走:这里我们介绍了两个新的参数displayField和mode,请记住,后面不再专门说明.boBox的value获取添加listeners事件:ComboBox的事件很多(api),我们无法一一讲解,但是我们可以举一反三,select事件就是其中典型的一个这里我们提供了一种不是很好的方法,在此不做过多停留9.把Extjs的ComboBox样式应用到select的下拉框中去核心参数介绍transform:id//用于转换样式的,TimeField作为ComboBox的子类也有此属性核心代码:boBox的其他重要参数a)valueField:"valuefield" //value值字段b)displayField:"field" //显示文本字段c)editable:false //false则不可编辑,默认为trued)triggerAction:"all"//请设置为"all",否则默认为"query"的情况下,你选择某个值后,再此下拉时,只出现匹配选项,如果设为"all"的话,每次下拉均显示全部选项e)hiddenName:string //真正提交时此combo的name,请一定要注意f)typeAhead:true, //延时查询,与下面的参数配合g)typeAheadDelay:3000, //默认250关于combobox的其他花俏功能在此不多做介绍.最后一点,如何实现在aspx页面更灵活的分离cs数据和js数据的交互?因为我们都喜欢把js放在一个单独的文件,然后在aspx页面引用这样就有一个问题,我在js里直接获取cs数据就有点不方便.我认为可以这样,在aspx页面里获取数据,并作为js,你就js变量,你就可以在js里引用了,或者直接通过url地址获取.之所以这么啰嗦的讲combobox,是因为这个东西有时候真的让人又爱又恨!下篇中我们继续讲解form中其他的表单元素!ExtJs2.0学习系列(7)--Ext.FormPanel之第四式(其他组件示例篇) 11.checkbox简单示例效果图:js代码:Ext.onReady(function(){Ext.QuickTips.init();var myform=new Ext.FormPanel({frame:true,width:330,layout:"form",labelWidth:30,title:"checkbox简单示例",labelAlign:"left",renderTo:Ext.getBody(),items:[{xtype:"panel",layout:"column",//也可以是table,实现多列布局fieldLabel:'爱好',isFormField:true,//非常重要,否则panel默认不显示fieldLabelitems:[{columnWidth:.5,//宽度为50%xtype:"checkbox",boxLabel:"足球",//显示在复选框右边的文字name:""},{columnWidth:.5,xtype:"checkbox",boxLabel:"篮球",name:""}]}]});});关于多列布局,我们可以使用column或者table布局解决!a)checked:true//true则选中,默认为falseb)name:"**"//name值c)value:""//初始化值,默认为undefine12.radio简单示例基本上和checkbox一样,不过注意一组单选框必须name值相同,才能单选.效果图:代码:Ext.QuickTips.init();var myform=new Ext.FormPanel({frame:true,width:330,layout:"form",labelWidth:30,title:"radio简单示例",labelAlign:"left",renderTo:Ext.getBody(),items:[{xtype:"panel",layout:"column",fieldLabel:'性别',isFormField:true,items:[{columnWidth:.5,xtype:"radio",boxLabel:"男",name:"sex"//inputValue},{columnWidth:.5,checked:true,xtype:"radio",boxLabel:"女",name:"sex"}]}]});});13.htmleditor简单示例效果图:frame:true,width:600,layout:"form",labelWidth:50,title:"htmleditor简单示例",labelAlign:"top",//items中的标签的位置renderTo:Ext.getBody(),items:[{xtype:"htmleditor",id:"he",fieldLabel:"编辑器",anchor:"99%"}]});});在这里我啰嗦个参数:labelAlign:此参数是指form表单中items各项的label位置,默认值为left,枚举值有left,right,top 我看见过有朋友认为此参数指title的位置,是错误的!几个其他的参数:a)hideLabel:true//默认为false,还适用于有标签的所有表单组件//下面的一组参数控制编辑器的工具栏选项,都是默认值为trueb)enableColors:true//默认为true,显示字体颜色,字体背景颜色c)enableAlignments:true//左,中,右对齐d)enableFont:true//字体e)enableFontSize:false//字体大小,就是A旁边有个小箭头的f)enableFormat:false//粗体,斜体,下划线g)enableLinks:true//链接h)enableLists:true//列表i)enableSourceEdit:true//源代码编辑14.datefield简单示例效果图:15.timefield简单示例把上面的例子中datefield改为timefield,效果图:16.numberfield简单示例:把上面的datefield改为numberfield,就只能输入数字了17.triggerfield简单示例说明:它提供了一个触发的事件onTriggerClick,datefield和combox都是继承它效果图:(点击右边下拉按钮)js代码:Ext.onReady(function(){Ext.QuickTips.init();var myform=new Ext.FormPanel({frame:true,width:200,layout:"form",labelWidth:30,title:"triggerfield简单示例",labelAlign:"left",renderTo:Ext.getBody(),items:[{xtype:"trigger",fieldLabel:"触发",anchor:"99%",onTriggerClick:function(e){//在这里写你要实现的事件,很容易扩展alert("");}}]});});好了,关于form的几个基本组件我们都蜻蜓点水的看了一遍,相信大家感性上知道是怎么回事啦!(总算快写完了formpanel)前面有朋友说要做个一行多个控件,中间有文字的那种form布局,谢谢支持!下篇我们就做一个复杂点的form组件,还能提交服务器的综合示例!敬请期待!ExtJs2.0学习系列(8)--Ext.FormPanel之第五式(综合篇)在上篇和前面的介绍中,我们基本上对form表单中常见组件有了简单的认识,今天我们做个综合点的例子,向服务器提交下!其实这篇文章很简单,没有什么发光点,暂放首页半天,忘各位理解!先来个简单的例子,以说明formpanel如何把数据传给其他页面.效果图:现在我们要实现的效果是:点击确定,把值传到另一页面!,如下:原页面js代码为:Ext.onReady(function(){Ext.QuickTips.init();var form=new Ext.FormPanel({frame:true,width:300,//monitorValid:true,//绑定验证layout:"form",labelWidth:70,title:"添加个人信息",labelAlign:"left",renderTo:Ext.getBody(),submit: function(){this.getEl().dom.action = 'GetForm.aspx',this.getEl().dom.method='POST',this.getEl().dom.submit();},items:[{xtype:"textfield",fieldLabel:"用户名",//id:"UserName",allowBlank:false,blankText:"不能为空,请正确填写",name:"UserName",anchor:"90%"},{接受页面GetForm.aspx的cs代码为:因为很简单,我做个简要说明://几点说明1.首先定义submit参数的执行函数,即:2.为按钮添加触发相应的提交(取消)事件(这样就不是默认的ajax提交):3.如果你想绑定验证,在form表单添加参数monitorValid:true,然后在按钮配置参数中添加formBind:true,如buttons:[{text:"确定",handler:login,formBind:true},{text:"取消",handler:reset}]则只有所有的填写字段都满足条件时,"确定"方可提交!如下图,好了,一个简单的formpanel的提交的原理弄清楚啦!有关form提交数据的方法有多种,大家可以参考/showtopic-55.aspx(三种ext提交数据的方式),下面我们来做个复杂点(只是样子)的form,示例一下(还是上面的原理)!效果图:传到GetForm.aspx页面后显示:不过在传过来的页面要记得ValidateRequest="false",安全编码我就暂且不讨论了!js代码:frame:true,width:500,monitorValid:true,//把有formBind:true的按钮和验证绑定layout:"form",labelWidth:55,title:"添加个人信息",labelAlign:"right",renderTo:Ext.getBody(),submit: function(){this.getEl().dom.action = 'GetForm.aspx',this.getEl().dom.method='POST',this.getEl().dom.submit();},items:[{xtype:"panel",layout:"column",fieldLabel:"用户名",isFormField:true,items:[{columnWidth:.5,xtype:"textfield",allowBlank:false,blankText:"不能为空,请填写",name:"UserName",anchor:"90%"},{columnWidth:.20,layout:"form",labelWidth:40,labelAlign:"right",items:[{xtype:"radio",fieldLabel:"性别",boxLabel:"男",name:"Sex",checked:true,inputValue:"man",//这里如果用value,值是on,所以用inputValue(出现这种情况的是radio,checkbox)anchor:"95%"}]},{columnWidth:.30,layout:"form",labelWidth:1,//让标签宽度为很小的值(奇怪的是为0时反而不行)items:[{xtype:"radio",boxLabel:"女",labelSeparator:"",//去除分隔符”:”name:"Sex",inputValue:"woman",anchor:"95%"}]}]},{//上面是第一行xtype:"panel",layout:"column",fieldLabel:"出生日期",isFormField:true,items:[{columnWidth:.5,xtype:"datefield",name:"BirthDate",anchor:"90%"},{columnWidth:.5,layout:"form",labelWidth:40,//注意,这个参数在这里可以调整简单fieldLabel的布局位置items:[{xtype:"combo",name:"Degree",fieldLabel:"学位",store:["小学","初中","高中","专科","本科","硕士","博士"],emptyText:"请选择适合你的学历",anchor:"90%"}]}]},{ //上面是第二行xtype:"panel",layout:"column",isFormField:true,fieldLabel:"使用框架",items:[{columnWidth:.2,xtype:"checkbox",boxLabel:"",name:"SpringNet",inputValue:"spring"//这里如果用value,值是on,所以用inputValue },{columnWidth:.2,layout:"form",labelWidth:1,items:[{xtype:"checkbox",boxLabel:"Nhibernate",labelSeparator:"",name:"NHibernate",inputValue:"nhibernate",anchor:"95%"}]},{columnWidth:.6,layout:"form",labelWidth:1,items:[{xtype:"checkbox",boxLabel:"Linq",labelSeparator:"",name:"Linq",inputValue:"linq",anchor:"95%"}]}]},{ //上面是第三行xtype:"textfield",fieldLabel:"Email",name:"Email",vtype:"email",//email验证,如果想自定义验证的话,请参见前面的文章vtypeText:"email格式错误!",anchor:"56%"//控制文本框的长度},{ //上面是第四行xtype:"textarea",fieldLabel:"个性签名",name:"OneWord",height:50,anchor:"95%"},{ //上面是第五行xtype:"htmleditor",fieldLabel:"想说的话",name:"WantToSay",anchor:"95%",enableAlignments:false,//去除左右对齐工具栏enableLists:false//去除列表工具栏}],buttons:[{text:"确定",handler:login,formBind:true},{text:"取消",handler:reset}]});function login(){form.form.submit();}function reset(){form.form.reset();}});ExtJs2.0学习系列(9)--Ext.TabPanel之第一式照旧,看个最简单的先,后面再详细说复杂的!效果图片:js代码:html代码:在这里例举几个参数:●tabPosition:"bottom"//选项卡的位置,枚举值bottom,top.默认为top(只有top的时候才能选项卡的滚动!)●tabTip:"提示"//必须先调用Ext.QuickTips.init();才有效果经常我们有这么个情况,一个选项卡加载一个页面,这里我提供一种不是很好但是很稳定的简单方法(已经在项目中验证没有出现问题).就是:使用iframe作为tab的标签页内容.1.用iframe加载其他完整页面的tabpanel.效果图:点击链接"换成博客园",html代码:js代码:今天的内容简单.就暂且说做到了这里,下篇中我们说说tabpanel的滚动标签和动态添加标签的tabpanel!ExtJs2.0学习系列(10)--Ext.TabPanel之第二式2.动态添加tabpanel的标签页效果图:点击"添加新标签页",会添加一个标签页,而且激活这个新的标签页.html代码:js代码:Ext.onReady(function(){Ext.QuickTips.init();var tabsDemo=new Ext.TabPanel({renderTo:Ext.getBody(),activeTab:0,height:700,frame:true,items:[{title:"autoLoad为html简单页面演示",autoLoad:{url:"tab1.htm",scripts:true}}]});//下面是添加新标签页的关键代码,很简单方便var index=0;Ext.get("AddNewTab").on("click",function(){tabsDemo.add({title:"newtab",id:"newtab"+index,html:"new tab",closable:true});tabsDemo.setActiveTab("newtab"+index);index++;})});简单说明:其实添加的话,只要add()方法就可以了,但是我们还要激活这个新的标签页,就必须setActiveTab(newtab的索引或id),关键就是我们不好判断这个索引,所以只好设置个递增的全局变量index来给newtab取名,这样我们也就能准确的获取新的不重复的newtab了,也就容易激活了.而且我们可以通过下图看出来.3.稍微修改上面的例子tabpanel(官方的例子)效果图:我就不多说了,关键的几个参数注释了下js代码:4.为tabpanel标签页添加右键菜单效果图:点击"关闭其他所有页"后,其他两个右键菜单还是道理相同.a)enableTabScroll:true//前面已经说过了b)listeners:{"contextmenu":function(参数1,参数2,参数3){.}}//右键菜单事件,三个参数分别为当前tabpanel,当前标签页panle,时间对象ec)扩充2,每个标签页都有激活和去激活事件activate和deactivate,他们的执行函数有个参数,就是当前标签页.menu=new Ext.menu.Menu()//menu组件,就不多说了,后面会专门分析下,不过不要忘记menu.showAt(e.getPoint());了html代码和上面的例子的html代码一样.js代码:Ext.onReady(function(){Ext.QuickTips.init();var tabsDemo=new Ext.TabPanel({renderTo:Ext.getBody(),//resizeTabs:true,宽度能自动变化,但是影响标题的显示activeTab:0,height:200,enableTabScroll:true,//挤的时候能够滚动收缩width:400,frame:true, //下面是比上面例子新增的关键右键菜单代码listeners:{//传进去的三个参数分别为:这个tabpanel(tabsDemo),当前标签页,事件对象e"contextmenu":function(tdemo,myitem,e){menu=new Ext.menu.Menu([{text:"关闭当前页",handler:function(){tdemo.remove(myitem);}},{text:"关闭其他所有页",handler:function(){//循环遍历tdemo.items.each(function(item){if(item.closable&&item!=myitem){//可以关闭的其他所有标签页全部关掉tdemo.remove(item);}});}},{text:"新建标签页",handler:addTab}]);//显示在当前位置menu.showAt(e.getPoint());}},items:[{title:"tab advantage",html:"sample1"}]});var index=0;function addTab(){tabsDemo.add({title:"ntab"+index,id:"newtab"+index,html:"new tab"+index,closable:true});tabsDemo.setActiveTab("newtab"+index);index++;}new Ext.Button({text:"添加新标签页",handler:addTab}).render(document.body,"AddBtn");});ExtJs2.0学习系列(11)--Ext.XTemplateXTemplate是Extjs里面的模板组件.下面我们看个最简单的例子.效果图:js代码:Ext.onReady(function(){//数据源var data={name:"博客园",read:[{book:'<<道不远人>>',date:'2007-7-7'},{book:"<<大话设计模式>>",date:"2006-6-6"}]}//呈现组件var mypanel=new Ext.Panel({width:400,id:"mypanel",title:"XtemplateData简单示例",renderTo:Ext.getBody()});//创建模板var tpl=new Ext.XTemplate('<table><tr><th>名称:{name}</th></tr>','<tr><td>','<tpl for="read">','<p>编号:{#},书:{book},日期:{date}</p>','</tpl></td></tr></table>');//重写绑定模板tpl.overwrite(mypanel.body,data);});a)pile();//可以在创建模板后,添加pile();编译代码,速度快点.b)tpl.overwrite(mypanel.body,data);//把数据填充到模板中去,并呈现到目标组件c)名称:{name}//对于一维单数据对象,直接用{名称}输出,d)<tpl for="read">//对于多维对象(如拥有多条数据的表),使用tpl和for配合使用,会使用tpl的格式把数据一条一条输出,read为上级节点e){.}//对于一维对数据的对象,如color: ['Red', 'Blue', 'Black'],可以用{.}按照tpl模板逐一输出,如:。
ExtJS 实用简明教程[收集整理:龚辟愚、QQ 群:19274175]序言ExtJS 是一个很不错的Ajax 框架,可以用来开发带有华丽外观的富客户端应用,使得我们的b/s 应用更加具有活力及生命力。
ExtJS 是一个用javascript 编写,与后台技术无关的前端ajax 框架。
因此,可以把ExtJS 用在.Net、Java、Php 等各种开发语言开发的应用中。
最近我们在几个应用都使用到了ExtJS,对公司以前开发的一个OA 系统也正在使用ExtJS2.0进行改造,使得整个系统在用户体验上有了非常大的变化。
本教程记录了前段时间本人学习ExtJS 的一些心得及小结,希望能帮助正在学习或准备学习ExtJS 的朋友们快速走进ExtJS2.0的精彩世界。
教程包括ExtJS 的新手入门、组件体系结构及使用、ExtJS 中各控件的使用方法及示例应用等,是一个非常适合新手的ExtJS 入门教程。
本教程主要是针对ExtJS2.0 进行介绍,全部代码、截图等都是基于ExtJS2.0。
在学习了本教程后,可以下载这个基于ExtJS2.0 开发的单用户Blog 系统的源代码,这个系统是我们团队中的williamraym 与大峡等人开发的一个演示系统,系统源码整体质量比较高,通过学习这套源代码相邻一定能提高您ExtJS 的综合水平。
本教程比较适合ExtJS 的新手作为入门教程及手册使用,并在我的博客/blog/lengyu/上进行发布;应一些朋友的要求,根据本教程的写作思路,我还编写了比本教程更为详细的《ExtJS 实用开发指南》,包含详细的ExtJS 框架使用方法、各个控件详细配置参数、属性、方法及事件介绍,与服务器端集成及一个完整的示例应用系统介绍等内容,适合想深入学习ExtJS 或正在使用ExtJS 进行开发朋友们使用。
该《指南》当前在 作为VIP 文档发布,供该站的VIP 用户阅读及下载。
凡是购买了《ExtJS 实用开发指南》文档的VIP 用户,都可以在该指南印刷版出版后均会免费得到相应的印刷版本。
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 的类及控件来实现需要的功能。
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++;})}}。
JavaScript的document对象和window对象详解 该对象是window和frames对象的⼀个属性,是显⽰于窗⼝或框架内的⼀个⽂档。
属性 alinkColor 活动链接的颜⾊(ALINK) anchor ⼀个HTMI锚点,使⽤<A NAME=>标记创建(该属性本⾝也是⼀个对象) anchors array 列出⽂档锚点对象的数组(<A NAME=>)(该属性本⾝也是⼀个对象) bgColor ⽂档的背景颜⾊(BGCOLOR) cookie 存储于cookie.txt⽂件内的⼀段信息,它是该⽂档对象的⼀个属性 fgColor ⽂档的⽂本颜⾊(<BODY>标记⾥的TEXT特性) form ⽂档中的⼀个窗体(<FORM>)(该属性本⾝也是⼀个对象) forms anay 按照其出现在⽂档中的顺序列出窗体对象的⼀个数组(该属性本⾝也是⼀个对象) lastModified ⽂档最后的修改⽇期 linkColor ⽂档的链接的颜⾊,即<BODY>标记中的LINK特性(链接到⽤户没有观察到的⽂档) link ⽂档中的⼀个<A HREF=>标记(该属性本⾝也是⼀个对象) links array ⽂档中link对象的⼀个数组,按照它们出现在⽂档中的顺序排列(该属性本⾝也是⼀个对象) location 当前显⽰⽂档的URL。
⽤户不能改变document.location(因为这是当前显⽰⽂档的位置)。
但是,可以改变window.location (⽤其它⽂档取代当前⽂档)window.location本⾝也是⼀个对象,⽽document.location不是对象 referrer 包含链接的⽂档的URL,⽤户单击该链接可到达当前⽂档 title ⽂档的标题((TITLE>) vlinkColor 指向⽤户已观察过的⽂档的链接⽂本颜⾊,即<BODY>标记的VLINK特性 ⽅法 clear 清除指定⽂档的内容 close 关闭⽂档流 open 打开⽂档流 write 把⽂本写⼊⽂档 writeln 把⽂本写⼊⽂档,并以换⾏符结尾 它是⼀个顶层对象,⽽不是另⼀个对象的属性即浏览器的窗⼝。
Extjs学习笔记Panel属性:var panel = new Ext.Panel({title:"信息系统",titleCollapse:true,//是否点击整个标题栏都可以收缩width:1000,height:600,//renderTo:"index"//在哪个元素中渲染frame:true,//如果为true 则panel具有全部阴影,否则只有1px 边框//floating:true,draggable:true,//是否允许拖动//plain:true,//方角默认collapsible:true,//contentEl:'divPanelContent'//此属性可以简写成“el”,显示哪个元素中的内容contentEl:就是panel中要显示的内容,不过它的值是一个html元素的id,例如上面我们就指明为"divPanelContent",这样panel中就会显示这个层中的内容。
当然如果只是简单的内容的话,我们可以直接使用html这个属性来指明panel内部的内容。
tools:[{id:"Save",handler:function(){Ext.Msg.alert("系统提示","保存页面成功!");}},{id:"Help"},{id:"Close",handler:function(){Ext.get("index").hide();}}],tbar:['请输入关键字:',new Ext.Toolbar.TextItem("工具栏"),{xtype:'textfield',width:80},'-',{text:'有种就点一下',handler:function(){alert("小子,你刚才点了此按钮!");}},{xtype:"tbfill"},{pressed:true,text:'添加'},{xtype:"tbseparator"},{pressed:true,text:'保存'}],bbar:[{text:"按钮3"},{text:"按钮4"}], //底部工具栏状态栏html:'<h1>hello,my name is 274!</h1>',//html:"<h1>这是在Panel中的内容...</h1>"buttons:[{text:"按钮5"},{text:"按钮6"}], //footer部工具栏buttonAlign:"left"});//win.show();panel.render("index");//在哪个元素中渲染renderTo指的是渲染到哪个元素上,因为对于Ext来说所有的我们看到的控件都是通过基本的html来模拟的,而panel要想显示就必须通过层来模拟,所以从上面你也能够看到我们指定panel渲染到"divPanel"这个Html原色上。
Extjs4,创建Ext组件有了新的方式,就是Ext.create(....),而且可以使用动态加载JS的方式来加快组件的渲染,我们再也不必一次加载已经达到1MB的ext-all.js了,本文介绍如何在EXTJS4中创建一个window。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>窗口实例</title><link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css" /><script type="text/javascript" src="../../bootstrap.js"></script><script type="text/javascript" src="../../locale/ext-lang-zh_CN.js"></script><script type="text/jscript">Ext.require('Ext.window');Ext.onReady(function(){Ext.create('Ext.Window',{width:400,height:230,//X,Y标识窗口相对于父窗口的偏移值。
JavaScript中window对象的常⽤⽅法BOM浏览器对象模型:是规范浏览器对js语⾔的⽀持(js调⽤浏览器本⾝的功能)。
BOM的具体实现是window对象window对象使⽤学习:1、window对象不⽤new,直接进⾏使⽤即可,类似Math的使⽤⽅式,window关键字可以省略不写。
2、框体⽅法 alert:警告框提⽰⼀个警告信息,没有返回 confirm:确认框提⽰⽤户选择⼀项操作(确定/取消) 点击确定返回true 点击取消返回false prompt:提⽰框,提⽰⽤某个信息的录⼊或者说收集点击确定,返回当前⽤书录⼊的数据,默认返回空字符串点击取消,返回null3、定时和间隔执⾏⽅法 setTimeout:指定的时间后执⾏指定的函数 参数1:函数对象 参数2:时间,单位毫秒。
返回值:返回当前定时器的id setInterval:每间隔指定的时间执⾏指定的函数 参数1:函数对象 参数2:时间,单位毫秒。
返回值:返回当前间隔器的id clearTimeout:⽤来停⽌指定的定时器 参数:定时器的id clearInterval:⽤来停⽌指定的间隔器 参数:间隔器的id4、⼦窗⼝⽅法 window.open('⼦页⾯的资源(相对路径)','打卡⽅式','配置'); ⽰例:window.open('son.html','newwindow','height=400, width=600,top=100px,left=320px, toolbar=yes, menubar=yes, scrollbars=yes, resizable=yes,location=no, status=yes'); 注意: 关闭⼦页⾯的⽅法window.close(),但是此⽅法只能关闭open⽅法打开的⼦页⾯。
5、⼦页⾯调⽤⽗页⾯的函数 window.opener.⽗页⾯的函数6、地址栏属性:location window.location.href="新的资源路径(相对路径/URL)" window.location.reload()重新加载页⾯资源7、历史记录属性 window.history.forward() 页⾯资源前进,历史记录的前进。
Js获取iframe中的window对象的实现方法介绍在开发网页应用时,我们经常会使用`<if r am e>`元素来加载其他网页内容。
然而,由于`<i fr am e>`元素与主页面是分离的,我们需要通过J a va Sc ri pt来获取`<if ra me>`中的`wi n do w`对象,以便进行进一步的操作。
本文将介绍几种实现方法来获取`<i fr am e>`中的`win d ow`对象。
方法一:使用i d属性直接获取w i n d o w对象在`<i fr am e>`元素上设定一个唯一的i d属性,通过该i d属性可以直接获取`w in do w`对象。
```j av as cr ip tl e ti fr am eW in do w=d o cu me nt.g et El eme n tB yI d('m yI fr ame').co nt e nt Wi nd ow;```方法二:使用J a v a S c r i p t的`wi ndow.f rames` 属性获取windo w 对象`w in do w.fr am es`属性返回了当前窗口中所有的`if ra me`窗口对象。
通过遍历该对象,我们可以找到目标`<if r am e>`并获取其`wi n do w`对象。
```j av as cr ip tl e tf ra me s=wi nd ow.f ra me s;f o r(le ti=0;i<f ram e s.le ng th;i++){l e ti fr am eW in do w=f r am es[i];i f(i fr am eW in do w.f r am eE le me nt.i d==='m yI fr am e'){//找到目标if ra me,并获取其w in do w对象b r ea k;}}```方法三:使用J a v a S c r i p t的`wi ndow.p arent` 属性获取windo w 对象如果`<if ra me>`的父文档与主页面同域,我们可以使用`w in do w.pa re nt`属性获取父文档的`w i nd ow`对象,然后再通过该对象获取`<if ra me>`的`w in do w`对象。
弹出窗口控制-window.open()弹出窗口控制-CSS+DIV弹出窗口控制-网页对话框2009-03-29 15:46分类:javaScript字号:大中小这里说的网页对话框是指通过脚本代码打开一个新的窗口,并且该窗口可以有返回值。
网页对话框分为网页模式对话框和网页非模式对话框。
(模式和非模式的区别我在这里就不赘述了)。
下面我们只针对网页模式对话框进行说明:弹出网页模式对话框:格式:var somevalue=window.showModalDialog(url[,Arguments[,Features]]);参数说明:url :指定url文件地址。
Argument :用于向网页对话框传递参数,传递参数的类型不限制,对于字符串类型,最大为4096字符。
也可以传递对象。
如index.html.在弹出的窗口中可通过var parameter=window.dialogArguments;获取传递来的参数。
Features:可选项。
窗口对话框的设置参数。
主要参数如下表:参数说明dialogWidth :number用于设置对话框的宽度dialogHeight :number用于设置对话框的高度dialogTop :number用于设置对话框窗口相对于桌面左上角的top位置dialogLeft :number用于设置对话框窗口相对于桌面左侧的left位置center :{yes|no|1|0}用于指定是否将对话框在桌面上居中,yes|1为居中,默认值为yesHelp :{yes|no 1|0}用于指定对话框窗口中是否显示上下文敏感的帮助图标。
默认为yesscroll :{yes|no 1|0}用于指定对话框中是否显示滚动条示例:说明:点击按钮后打开一网页模式对话框。
在网页对话框中选择一个值后关闭该模式对话框。
并将返回值传递到父窗口中。
如下:<script language="javascript">function openDialog(){var somevalue=window.openModalDialog("test.jsp","","dialogWidth=400p x;dialogHeight=300px;help=no;status=no")erName=somevalue;}在弹出的模式对话框中调用一个js函数向打开的窗口返回信息function action(user){parent.window.returnValue=user;window.close();}流程:通过window.openModalDialog()打开一模式窗口,在打开的窗口中调用action()函数将返回值传递给打开的对话框。