Etxjs
来源:互联网 发布:网络视频下载app 编辑:程序博客网 时间:2024/05/29 07:21
Extjs
环境搭配:(详见笔记——张海主讲)
1,把spket集成到myeclipse,解压文件,把文件放到myeclipse中的dropins文件夹中:
2,在myeclipse中windows->preferences->spket进行设置,另外还要设置.js
3,在工程中需要引入的包和库:
Ext.onReady:这个方法是Ext的准备函数,也就是Ext相关的代码都会在这个函数里书写,它比较类似于windowonload方法。但是注意其执行时机是在页面DOM对象加载完毕之后立即执行。
Ext.window.MessageBox:提供EXTJS的弹出提示框,确认框等简单的小组件。
注意:要导的包:
要导入的库:<!--ext的样式--><link rel="Stylesheet" type="text/css" href="js/extjs/resources/css/ext-all.css" /><!--extjs的核心文件--><script type="text/javascript" charset="utf-8" src="js/extjs/ext-all-debug.js"></script> <!--国际化文件--> <script type="text/javascript" charset="utf-8" src="js/extjs/ext-lang-zh_CN.js"></script> <script type="text/javascript" charset="utf-8" src="test.js"></script> <script type="text/javascript" charset="utf-8" src="test2.js"></script>
案例:index.jsp:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--ext的样式--><link rel="Stylesheet" type="text/css" href="js/extjs/resources/css/ext-all.css" /><!--extjs的核心文件--><script type="text/javascript" charset="utf-8" src="js/extjs/ext-all-debug.js"></script> <!--国际化文件--> <script type="text/javascript" charset="utf-8" src="js/extjs/ext-lang-zh_CN.js"></script> <script type="text/javascript" charset="utf-8" src="test.js"></script> <script type="text/javascript" charset="utf-8" src="test2.js"></script> </head> <body> <br> </body></html>
text2.js:
Ext.onReady(function(){//提示信息/*Ext.MessageBox.alert("我是标题2","Helloworld!",function(){console.info(this);alert("我是回调函数!");},this);*///询问框/*Ext.Msg.confirm('提示信息3','确认删除该条记录么?',function(op){if(op=='yes'){alert('确认了');}else{alert('取消');}});*///输入框/*Ext.Msg.prompt('我是标题','请输入姓名:',function(op,val){//op ok cancelconsole.info(op);console.info(val);},this,true,'张三');*///等待框/*Ext.Msg.wait('加载进度','提示信息',{interval:400,//循环定时的间隔duration:20000,//总时长increment:15,//执行进度条的text:'加载中,请稍后.....',//提示文字scope:this,//fn:function(){alert('更新成功!');},animate:true //更新渲染时的动画效果});*///show方法Ext.Msg.show({title:'我是自定义的提示框',msg:'我是警告',width:300,height:300,buttons:Ext.Msg.YESNOCANCEL,icon:Ext.Msg.WARNING});});
javascript:
好书推荐《javascript高级程序设计》,《javascript设计模式》
javascript的6种基本类型:
number,string,boolean,object,function和undefilned;
过滤器的写法:
//过滤器filter
var arr=[10,20,21,35,18];
var newarr=arr.filter(function(item){
if(item>20){
return true;
}else{
return false;
}
});
alert(newarr);
//三种函数的写法:
//1,function语句式
function fun1(){
alert('fun1...');
};
//2,函数直接量形式
var fun2=function(){
alert('fun2...');
};
//3,构造函数形式
var fun3=new Function('fun3...');
var fun4=new Function('x','y','return x+y;');
alert(fun4(10,20));
Ext.onReady(function(){//numbervar num1=10;var num2=10.5;var num3=.6;//0.6var num4=070;//66var num5=1/0;//正无穷//string//object/*var date=new Date();var arr=new Array();var obj={name:'bjsxt',age:10};obj.constructor();alert(obj.hasOwnProperty('name'));alter(obj.toSource());*///function函数类型/*function fun(){console.info('fun...');}alert(typeof fun);*///过滤器filter/*var arr=[10,20,21,35,18];var newarr=arr.filter(function(item){if(item>20){return true;}else{return false;}});alert(newarr);*///三种函数的写法://1,function语句式function fun1(){alert('fun1...');};//2,函数直接量形式var fun2=function(){alert('fun2...');};//3,构造函数形式var fun3=new Function('fun3...');var fun4=new Function('x','y','return x+y;');alert(fun4(10,20));});
/*var k=1;function test(){var k=2;//创建第二种方式的函数function f(){return k;}var f=function(){return k;};var f=new Function('return k;');alert(f());};test();*/
arguments对象:
//arguments对象://第一个作用:接收函数的实际参数:arguments.callee表示引用当前函数本身function test(x,y){alert(arguments.length);alert(arguments[2]);};test(1,2);//第二个作用:通常用于递归操作function fact(number){if(number<=1){return 1;}else{return number*fact(number-1)}};alert(fact(5));var fact2=fact;fact=null;alert(fact2(5));
尚学堂06,07讲javascript还未看,以后补上。
Ext.window.window(一)
Ext.onReady(function(){Ext.create('Ext.window.Window', { title: '我的第一个组件window', height: 200, width:300, layout:'fit',constrain:true,//限制窗体不超出浏览器边界 renderTo:Ext.getBody() }).show(); });
效果:
注:
constrain:true,//限制窗体不超出浏览器边界
constrainHeader:true,//不允许浏览器的title超出浏览器边界
Ext.onReady(function(){Ext.create('Ext.window.Window', { title: '我的第一个组件window', height: 200, width:300, layout:'fit', constrain:true,//限制窗体不超出浏览器边界 constrainHeader:true,//不允许浏览器的title超出浏览器边界 modal:true,//设置一个模态窗口 plain:true, icon:'js/icon/window.png',//图标,是图片路径 iconCls:'',//是css样式 x:50, y:50,//定窗口位置 onEsc:Ext.getBody(),//按Esc键时关闭窗口 autoScroll:true,//滚动条 html:'<div style=width:200px;height:200px;>我是第一个div</div><div style=width:200px;height:200px;>我是第二个div</div>', renderTo:Ext.getBody() }).show(); });<img src="http://img.blog.csdn.net/20151119202926109?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
案例1:点击一个按钮,打开一个窗体,并要求避免重复创建
Ext.create('Ext.Button', { text : 'Button', renderTo : Ext.getBody(), listeners: { click: function() { Ext.create('Ext.window.Window',{ title:'新窗体', height: 200, width:300, layout:'fit', renderTo:Ext.getBody() }).show(); } }});});
代码更新:
Ext.onReady(function(){//案例1:点击一个按钮,打开一个窗体,并要求避免重复创建 //法一 Ext.create('Ext.Button', { text : 'Button', renderTo : Ext.getBody(), listeners: { click: function() { if(!Ext.getCmp('mywin')){//法二:模态避免了重复创建窗体的问题: Ext.create('Ext.window.Window',{ id:'mywin',//如果给主键加了id,那么就会被EXT管理 title:'新窗体', height: 200, width:300, layout:'fit', renderTo:Ext.getBody() //modal:true //法一:模态避免了重复创建窗体的问题: }).show(); } } }});/*//法二:var win=Ext.create('Ext.window.Window',{title:'第二种方法创建的新窗体',height:300,width:400,renderTo:Ext.getBody()});Ext.get('btn').on('click',function(){});*/});
效果:
案例二:在组件中添加子组件(用items添加)
代码:
Ext.onReady(function(){//例二:添加子组件及查找组件var win=new Ext.window.Window({title:"添加子组件实例",height:400,width:"40%",renderTo:Ext.getBody(),draggable:false ,//不允许拖拽resizable:false ,//不可以改变窗口大小closable:true , //是否可以关闭窗口collapsible:true, //是否可折叠bodyStyle:'background:#fcf;padding:10px;',//设置样式html:'我是window的内容',//Ext items配置子组件的配置项items://items添加子组件[{//Ext组件给我们提供了一个简单的写法,xtype属性xtype:'panel',width:'100%',height:100,html:'我是面板!!'},{xtype:'button',text:'按钮',handler:function(btn){//handler:每个绑定到当前action的组件,在主要的事件被触发时,都会调用的函数。alert('我被点击了');alert(btn.text);}}]});win.show();});
效果:
案例二之查找组件:
代码:
Ext.onReady(function(){var win=new Ext.Window({id:'mywin',title:'操作组件的形式',width:500,height:300,bodyStyle:'background:#fcf;padding:10px;',renderTo:Ext.getBody(),fbar :// 表示当前组件的底部位置添加一个工具条,bbar表示在下面添加,tbar表示在当前组件的顶部,同理有lbar和rbar;[{text : '按钮1',handler : function(btn) {// 组件都会有up和down这两个方法,表示向上或者向下查找,需要的参数是组件的xtype或者选择器alert(btn.up('window').title);}}, {text : '按钮2',handler : function(btn) {//最常用的方式alert(Ext.getCmp('mywin').title);}}, {text : '按钮3',handler : function(btn) {//一上一級組件的形式去查找ownerCtalert(btn.ownerCt.ownerCt.title);//console.info(btn.ownerCt);}}] });win.show();});
效果:
重点:
查找组件的三种方法:
[{text : '按钮1',handler : function(btn) {// 组件都会有up和down这两个方法,表示向上或者向下查找,需要的参数是组件的xtype或者选择器alert(btn.up('window').title);}}, {text : '按钮2',handler : function(btn) {//最常用的方式alert(Ext.getCmp('mywin').title);}}, {text : '按钮3',handler : function(btn) {//一上一級組件的形式去查找ownerCtalert(btn.ownerCt.ownerCt.title);//console.info(btn.ownerCt);}}]
案例003:用windowGroup去操作多個窗口
代码:
Ext.onReady(function(){//案例003:用windowGroup去操作多個窗口 var wingroup=new Ext.WindowGroup(); for(var i=1;i<=5;i++){ var win=Ext.create('Ext.Window',{ title:'第'+i+'個窗口', id:'win_'+i, width:300, height:300, renderTo:Ext.getBody() }); win.show(); wingroup.register(win);//把窗體對象註冊給EindexManger } var btn1=Ext.create('Ext.button.Button',{ text:'全部隐藏', renderTo:Ext.getBody(), handler:function(){ wingroup.hideAll();//隱藏所有被管理額window組件 } }); var btn2=new Ext.Button({ text:'全部显示', renderTo:Ext.getBody(), handler:function(){ wingroup.each(function(cmp){ cmp.show(); }); } }); var btn3=new Ext.Button({ text:'把第3个窗口显示最前端', renderTo:Ext.getBody(), handler:function(){ wingroup.bringToFront('win_3'); } }); var btn4=new Ext.Button({ text:'第5个窗口显示在最末端', renderTo:Ext.getBody(), handler:function(){ wingroup.sendToBack('win_5'); } }); });
效果:
Ext基础架构
定义一个类并实例化:
Ext.onReady(function(){//在Ext中如何定义一个类:Ext.define(className,properties);/*传统的javascrit写法:function Person(name,age){this.name=name;this.age=age;};*/Ext.define('Person',{//这里是对这个类的配置信息//config就是配置当前类的属性内容,并且会加上get和set方法config:{name:'张三',age:20},say:function(){alert('我是方法...');},//给当前定义的类加一个构造器constructor:function(config){var me=this;me.initConfig(config);}});var p=Ext.create('Person',{name:'王五',age:25});alert(p.getName());alert(p.getAge());p.say();});
Ext.apply();为对象扩展属性或方法的:
应用代码:
Ext.onReady(function(){//Ext.js//Ext.apply();为对象扩展属性或方法的var src={name:'潘掌柜',age:20};var config={name:'佐酒先生',sex:'男'};Ext.apply(src,config);//name:潘掌柜 20 男for(var attr in src){alert(attr+ ":" +src[attr]);}});
注意:apply与applyIf:
apply():为对象扩展属性或方法的
applyif():如果当前对象存在属性,就不copy,如果不存在,就copy
typeof()的用法:
Ext.typeOf():传回变量的类型var str='111';var num=20;alert(Ext.typeOf(str));alert(Ext.typeOf(num));
isArray():枚举
//Ext.isArray()var arr=[1,2,3,4];Ext.iterate(arr,function(item){alert(item);});
Ext.override:
用给定的值重写指定target的成员。
//Ext.override():用给定的值重写指定target的成员。Ext.define('User',{say:function(){alert('我是say......');}});var user=Ext.create('User');Ext.override(user,{say:function(){alert('我是覆盖的方法');}});user.say();
native还未看 ,以后补上
动态的创建窗口:
Ext.onReady(function(){//window/*Ext.create('Ext.Window',{title:'我是窗口',height:300,width:400,constrain:true,modal:true,html:'我是窗体的内容',renderTo:Ext.getBody()}).show();*///Ext MVC//先建一个模板Ext.define('Mywindow',{ //自己定义的类'Mywindow'extend:'Ext.window.Window',//继承Ext的window类title:'我是窗口',height:300,width:400,constrain:true,//modal:true,html:'我是窗体的内容',renderTo:Ext.getBody()});//创建模板的实例var w1=Ext.create('Mywindow',{title:'我是窗口1'});var w2=Ext.create('Mywindow',{title:'我是窗口2'});var w3=Ext.create('Mywindow',{title:'我是窗口3'});w1.show();w2.show();w3.show();});
动态加载js
//第一步:js/extjs/添加文件夹(ux)
//第二步:在ux下建自己的组件对应相应的js
//第三步:启用extjs动态加载的机制并设置要加载的路径
//第四步:创建类的实例并使用
Mywindow.js代码如下:
//define的类名一定要严格按照包层次路径去编写Ext.define('js.extjs.ux.Mywindow',{extend:'Ext.window.Window',//继承Ext的window类title:'我是动态加载进来的组件',height:300,width:400,constrain:true,modal:true,html:'我是动态加载进来的组件',renderTo:Ext.getBody()});jsp中编辑如下:
//动态加载js//第一步:js/extjs/添加文件夹(ux)//第二步:在ux下建自己的组件对应相应的js//第三步:启用extjs动态加载的机制并设置要加载的路径Ext.onReady(function(){Ext.Loader.setConfig({enabled:true,path:{myux:'js/extjs/ux'}});//第四步:创建类的实例并使用Ext.create('js.extjs.ux.Mywindow').show();});