ExtJS学习笔记(一)

1.ExtJS环境搭建

①先在官网下载spket-1.6.23,extjs-4.1.1,解压,将解压后的文件夹plugins,features放到MyEclipse\MyEclipse 10\dropins内,我的是MyEclipse10,可以这样用。然后打开MyEclipse10,在window-->Preferences会发现出现选项Spket,表示插件安装成功。点Spket-->JavaScript Profile,New一个profile,name随便写,不过建议写ExtJS,点Add Library,在library里选ExtJS,再add file,选择sdk.jsb3,全选。最后再点Default,记住,一定要点Default。这文件是给智能提示的。注意:路径一定要为extjs-4.1.1\build\sdk.jsb3,而不是随便一个路径上的sdk.jsb3,必须要在extjs-4.1.1文件夹中去找。否则写js文件时,不会出现提示。下午就因为换了路径而死活找不到问题所在,最后才发现。

②这时再在window-->Preferences-->General-->Editors-->File Associatior,选“.js”,将Spket JavaScript Editor设为Default,这是默认使用Spket打开js文件的。

③解压后的extjs-4.1.1有examples和resources文件夹,导入项目中(就是直接复制),导入前右键点击项目名称,选Propreties-->Builders,将JavaScript Validator勾掉,否则导入这两个文件夹时,MyEclipse会卡死,最后只能重装MyEclipse。

④再导入ext-all-debug.js和ext-lang-zh_CN.js,在jsp页面里边这样写:

<!-- 引入ext的样式文件 -->
<link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css">
<!-- 引入ext核心文件,开发模式 -->
<script type="text/javascript" charset="utf-8" src="extjs/ext-all-debug.js"></script>
<!-- 引入国际化文件 -->
<script type="text/javascript" charset="utf-8" src="extjs/ext-lang-zh_CN.js"></script>
<!-- 引入外部js文件,要是直接在jsp里边写,反应会很慢 -->
<script type="text/javascript" charset="utf-8" src="base/001_helloworld.js"></script>
注意,使用extjs时,js文件不要写到jsp里边,要从外部引入,否则此时在jsp里写javascript语句会非常卡。

测试使用时会发现MessageBox中title文字会比较小,这时要将resources/css/ext-all.css中的11px全部替换为12px即可。

2.Ext.onReady()表示确保页面全部加载完后才执行javascript语句,是一个入口函数,相当于java里边的main函数。

3.若属性在config里面,则系统会默认给出set或get方法。只是在extjs中不智能提示,需要手打。如:

//ExtJS 建立类 实例化对象
	Ext.define('Person',{//创建新类
		config:{     //配置项
			name:'张三', 
			age:20
		},
		say:function(){
			alert('say...');
		},
		constructor:function(config){//将配置项初始化,新建类时最好写上构造函数.下边为推荐写法
			var self = this;
			self.initConfig(config);//初始化类 传递参数
		}
	});

	//实例化对象
	var p = Ext.create('Person',{ 
		name:'李四',      //该处为逗号,不是分号
		id:50,            //不能通过这样的方式来给子类增加新属性,因为在父类config里没有定义    
		age:21            //最后一步后边没有任何符号,这和js不同。js每步后都为分号
	});
	alert(p.getName());//getName()是系统自动补充,但不会给出提示,需要我们手打。
	alert(p.getAge());
	alert(p.id);//此时会显示id为undefined
	alert(p.getId());//会报错,p.getAge is not a function 因为在父类中没定义
	p.say();
)};
在上边,构造器最常见的写法是下边的,但不推荐,而通过新建变量接收this值得方式更安全,推荐使用上边写法。

constructor:function(config){
			this.initConfig(config);//初始化类 传递参数
		}
而在js中是这样建类的

function Person(id,name){//新建类
	this.id = id;
	this.name = name;
}

var p = new Person(10,"李四");//实例化对象
4.ext要创建一个类,用Ext.define;实例化对象则用Ext.create。
   Ext.define可以创建类,可以继承其它类,也可以被继承。可配默认属性:
   extend( 注意,后面没有s):继承其它的类
   mixins:将其他的类融入到当前类,类似于多继承。observable是经常被mixins的
   constructor:构造函数,推荐最好写上。
如:
Ext.define('Ext.Ajax',{
	mixins{   //添加混合方法
		observable:'Ext.util.observable'


	}
});
5.render表示渲染,渲染的意思就是
比如new Ext.Panel();此时页面上是没有这个panel的,什么都看不到,它只是存在于内存中的javascript对象。当调用panel.render('div1');时,就是把这个对象中对应的配置放到html中,这时才能看到带有ext样式的panel.或可用renderTo:Ext.getBody()等方法渲染到body中(必须写这一句,否则不会在页面显示)

6.js新建的类中如何添加方法?

function Person1(id,name){
		this.id = id;
		this.name = name;
		this.say = function(){//一定要写this,否则会在实例化对象时提示say is not a function
			alert("js中的say方法");
		};
	};

var p = new Person1();
7.
Ext.MessageBox.alert(String title,String Msg,[Function fn],[Object scope]);
作用是显示一对话框,其中title为标题,Msg为内容,fn为回调函数,“[]”里边的都是可选,scope为作用域。如:

Ext.MessageBox.alert("这是标题", "信息提示对话框!", function(){  
    alert("你好"); //对话框有一“确定”按钮,点下会弹出“你好”  
});
这是给对话框添加了方法

8.Ext.widget是只有如TestField,checkBox,button等菜单类组件

9.对于单例(即singleton)类的理解:单例类就是这个类,不管new多少次,只创建一个对象,可以直接使用。如在新建的window中使用

single:true;
则show()后,window只弹出一次。若不使用上句,则每一次show(),就会弹出一个window

10.Ext.apply 将原对象的所有属性和方法复制到目标对象
Ext.applyif 将原对象的所有目标对象未包含的属性和方法复制到目标对象
Ext.Array.each 遍历数组,类似于for(var x in array)

11.syntax error是语法错误

12.创建面板的过程

Ext.onReady(function(){    //这是extjs的规定写法,必须这样写
	//panel
	Ext.create('Ext.panel.Panel',{   //创建pannel可以是Ext.panel.Panel,或Ext.Panel,不能是单独的pannel或Pannel.同理,创建按钮可用Ext.create('Ext.Button',{});
		title:'这是面板',
		width:'50%',
		height:'60%',
		html:'<div id="mydiv">这是div</div><input type="text" id="inp">',   //pannel中可加html元素
		renderTo:Ext.getBody(),   //通过该句使面板从内存显示到页面
		frame:true   //这句作用就是使面板有背景色,棱角圆润些,更好看
	});
});
13.alias即给方法增加别名,在某些时候使用会很方便

var obj = {
		obj1:{
			obj2:{
				obj3:{
					say:function(){
						alert("哈哈")
					}
				}
			}
		}
	}
var myobj = Ext.Function.alias(obj.obj1.obj2.obj3,'say');
myobj();//该句的作用和obj.obj1.obj2.obj3.say()一样,都出现一样的结果
结果就是弹窗提示"哈哈"

正常情况下,若不起别名,想使用say方法,则要用obj.obj1.obj2.obj3.say(),这时就体现出别名的好处了,直接使用别名,而不是那一长串字符。

14.对于享元模式,用fly写享元模式,与以前的写法稍有不同,应该处理完一个内容再处理另一个,否则出错。例如:

//fly则是利用享元模式
	var sp2 = Ext.fly('sp2');
	sp2.applyStyles({
		backgroundColor:'red',
		fontsize:'50px'
	});
	
	var sp1 = Ext.fly('sp1');
	sp1.applyStyles({
		backgroundColor:'yellow',
		fontsize:'20px'
	});
结果为:



若写成这样:

//fly则是利用享元模式
	var sp2 = Ext.fly('sp2');
	var sp1 = Ext.fly('sp1');
	sp1.applyStyles({
		backgroundColor:'yellow',
		fontsize:'20px'
	});
	
	sp2.applyStyles({
		backgroundColor:'red',
		fontsize:'50px'
	});
结果就变成:

谁在下边就改谁,无论修饰的是不是该元素。这也是享元模式的特点。

15.js中的数组是用[]括起来的,而在java中则是用{}包括










评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值