EXTJS面向對象設計

記得要將代碼放到ext-2.3.0(我用的是這個)中,才能運行哦,還有注意js和css的路徑問題!!

 

1、支持命名空間(文件夾namespace中)

 

HelloWorld.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> 命名空間 </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<link rel="stylesheet" type="text/css" href="../resources/css/ext-all.css"/>
<script src="../adapter/ext/ext-base.js"></script>
<script src="../ext-all.js"></script>
<script src="HelloWorld.js"></script>
<script>
    new Ext.test.HelloWorld(); // 創建一個類的實例
</script>
</HEAD>
<BODY>

</BODY>
</HTML>

HelloWorld.js

Ext.namespace("Ext.test");// 定義一個命名空間

Ext.test.HelloWorld = Ext.emptyFn;// 在命名空間上定義一個類HelloWorld

//Ext.test.HelloWorld = function(){};
 

2、支持類實例屬性(文件夾property中)

 

Person.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> 類實例屬性 </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<link rel="stylesheet" type="text/css" href="../resources/css/ext-all.css"/>
<script src="../adapter/ext/ext-base.js"></script>
<script src="../ext-all.js"></script>
<script src="Person.js"></script>
<script>
     var _person = new Ext.test.Person();
	 alert(_person.name);

	 _person.name="chen";// 修改name屬性
	 alert(_person.name);
</script>
</HEAD>
<BODY>

</BODY>
</HTML>

Person.js

Ext.namespace("Ext.test");
Ext.test.Person = Ext.emptyFn;

//apply方法用來把後面對象的參數拷貝到第一個對象中
Ext.apply(Ext.test.Person.prototype,{
			name:"lian"
	});


以下只寫javascript腳本,具體如上!


3、支持類實例方法(文件夾instanceMethod中)

 

Person.html

<script src="Person.js"></script>
<script>
     var _person = new Ext.test.Person();
	 _person.name="lian";
	 _person.sex="男";
	 _person.print();

	 _person.name="chen";
	 _person.sex="女";
	 _person.print();
</script>

Person.js

Ext.namespace("Ext.test");
Ext.test.Person = Ext.emptyFn;

// 類實例方法
Ext.apply(Ext.test.Person.prototype,{
			name:"",
			sex:"",
			print:function(){
				alert(String.format("姓名:{0},性別:{1}",this.name,this.sex));
			}
	});
 

4、支持類靜態方法 (文件夾staticMethod中)

 

Person.html

<script src="Person.js"></script>
<script>
	Ext.test.Person.print("lian","男");//調用類靜態方法
</script>

Person.js

Ext.namespace("Ext.test");
Ext.test.Person = Ext.emptyFn;

//類靜態方法
Ext.test.Person.print = function(_name,_sex){
		var _person = new Ext.test.Person();
 		_person.name = _name;
	    _person.sex=_sex;
        _person.test();//調用類實例方法

}

Ext.apply(Ext.test.Person.prototype,{
			name:"",
			sex:"",
			test:function(){
				alert(String.format("姓名:{0},性別:{1}",this.name,this.sex));
			}
	});

 

5、支持構造器 (文件夾constructor中)

 

Person.html

<script src="Person.js"></script>
<script>
	Ext.test.Person.print("lian","男");// 調用類 靜態方法
</script>

 Person.js

Ext.namespace("Ext.test");

// 構造方法
Ext.test.Person = function(_cfg){
	Ext.apply(this,_cfg);
};

// 類靜態方法
Ext.test.Person.print = function(_name,_sex){
		var _person = new Ext.test.Person({name:_name,sex:_sex});
        _person.test();// 調用類 實例方法
}

// 類實例方法
Ext.apply(Ext.test.Person.prototype,{
			test:function(){
				alert(String.format("姓名:{0},性別:{1}",this.name,this.sex));
			}
	});
 

6、支持類繼承 (文件夾extend中)

 

Person.html

<script src="Person.js"></script>
<script src="Student.js"></script>
<script src="Teacher.js"></script>
<script>
	var _teacher = new Ext.test.Teacher({name:"lian",sex:"男"});
	_teacher.test();

	var _student = new Ext.test.Student({name:"chen",sex:"女"});
	_student.test();
</script>

 Person.js

Ext.namespace("Ext.test");

Ext.test.Person = function(_cfg){
	Ext.apply(this,_cfg);
};

Ext.apply(Ext.test.Person.prototype,{
	        job:"無",
			test:function(){
				alert(String.format("姓名:{0},性別:{1},角色:{2}",this.name,this.sex,this.job));
			}
	});

Student.js

Ext.namespace("Ext.test");

Ext.test.Student = function(_cfg){
	Ext.apply(this,_cfg);
};

Ext.extend(Ext.test.Student,Ext.test.Person,{
		job:"學生"
	});

Teacher.js

Ext.namespace("Ext.test");

Ext.test.Teacher = function(_cfg){
	Ext.apply(this,_cfg);
};

Ext.extend(Ext.test.Teacher,Ext.test.Person,{
		job:"教師"
	});

 

7、支持類方法重寫 (文件夾override中)

 

Student.js

Ext.namespace("Ext.test");

Ext.test.Student = function(_cfg){
	Ext.apply(this,_cfg);
};

//重寫test()方法
Ext.extend(Ext.test.Student,Ext.test.Person,{
		test:function(){
				alert(String.format("{0}是一位{1}學生",this.name,this.sex));
			}
	});

Teacher.js

Ext.namespace("Ext.test");

Ext.test.Teacher = function(_cfg){
	Ext.apply(this,_cfg);
};

Ext.extend(Ext.test.Teacher,Ext.test.Person,{
			test:function(){
				alert(String.format("{0}是一位{1}老師",this.name,this.sex));
			}
	});

 其餘的與類繼承一樣。

 

8、支持命名空間別名 (文件夾nameShort中)

 

Person.html

<script src="Person.js"></script>
<script>
	Pk.Person.print("lian","男");
</script>

 Person.js

Ext.namespace("Ext.test");

Pk=Ext.test;//命名空間別名

Ext.test.Person = function(_cfg){
	Ext.apply(this,_cfg);
};

Ext.test.Person.print=function(_name,_sex){

	var _person = new Pk.Person({name:_name,sex:_sex});
	_person.test();
}

Ext.apply(Ext.test.Person.prototype,{
			test:function(){
				alert(String.format("姓名:{0},性別:{1}",this.name,this.sex));
			}
	});

 

9、支持類別名 (文件夾nameAlis中)

 

Person.html

<script src="Person.js"></script>
<script>
	PN.print("bcterry","男");
</script>

 Person.js

Ext.namespace("Ext.test");

Ext.test.Person = function(_cfg){
	Ext.apply(this,_cfg);
};

PN=Ext.test.Person;//類別名

Ext.test.Person.print=function(_name,_sex){

	var _person = new PN({name:_name,sex:_sex});
	_person.test();
}

Ext.apply(Ext.test.Person.prototype,{
			test:function(){
				alert(String.format("姓名:{0},性別:{1}",this.name,this.sex));
			}
	}); 

 

10、支持事件隊列 (文件夾event中)

 

Person.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> 事件(訂閱) </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<link rel="stylesheet" type="text/css" href="../resources/css/ext-all.css"/>
<script src="../adapter/ext/ext-base.js"></script>
<script src="../ext-all.js"></script>
<script src="Person.js"></script>
<script>
    var _person = null;
	button_click = function(){
		_person.setName(prompt("請輸入姓名:",""));
		_person.setSex(prompt("請輸入性別:",""));
	}
	
	//先加載
	Ext.onReady(function(){
		var txt_name = Ext.get("txt_name");//獲得dom對象 
		var txt_sex = Ext.get("txt_sex");

		_person = new Ext.test.Person();

		//註冊事件
        _person.on("namechange",function(_person,xx,yy){
									alert(1);
									txt_name.dom.value = yy;	
		                        });

		_person.on("sexchange",function(_person,_old,_new){
									txt_sex.dom.value = _new;			
		                        });

        _person.on("namechange",function(_person,_old,_new){
									document.title = _new;	//設置標題		
		                        });

	});

</script>
</HEAD>
<BODY>
姓名:<INPUT TYPE="text" id="txt_name" NAME="" maxlength="10">
性別:<INPUT TYPE="text" id="txt_sex" NAME="" maxlength="10">
<INPUT TYPE="button" value="輸入" NAME="" οnclick="button_click()">
</BODY>
</HTML>

 Person.js

Ext.namespace("Ext.test");

Ext.test.Person = function(){
	//定義事件
	this.addEvents(
		"namechange",
		"sexchange"
	);
};

Ext.extend(Ext.test.Person,Ext.util.Observable,{
	     name:"",
		 sex:"",
		 setName:function(_name){
            if(this.name!=_name){
				alert(0);
                 this.fireEvent("namechange",this,this.name,_name);//處理事件者
                 this.name = _name;
            }
		 },
		 setSex:function(_sex){
            if(this.sex!=_sex){
                 this.fireEvent("sexchange",this,this.sex,_sex); 
                 this.sex = _sex;
            }
		 }
});
 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章