Ext.js入门(二)
ExtJs OOP基础
一:ExtJs中的面向对象
1、ExtJs中命名空间的定义
Ext中的命名空间类似于C#中的namespace和java中的包,用来对工程中的类进行更好的管理,命名空间的层次结构用.来划分。
Ext通过namespace()方法来创建命名空间.
语法:Ext.namespace(“命名空间”);
示例:Ext.namespace(“MyOffice.System”);
eg:
// 定义一个命名空间 Ext.namespace("Ext.OA");
// 在命名空间上定义一个类 Ext.OA.helloworld = Ext.emptyFn;
// 创建一个类的实例 new Ext.OA.helloworld();
2.Ext中的做法
<script type="text/javascript">
// 定义一个命名空间 Ext.namespace("Ext.OA");
// 在命名空间上定义一个类 Ext.OA.helloworld = Ext.emptyFn;
// 创建一个类的实例 new Ext.OA.helloworld();
</script>
其中
Ext.OA.helloworld = Ext.emptyFn;
等价于
Ext.OA.helloworld = function(){};
3.支持类实例属性
<script type=“text/javascript”>
Ext.namespace(“Ext.OA”); // 自定义一个命名空间
Ext.OA.Person = Ext.emptyFn; // 在命名空间上自定义一个类
// 为自定义的类 增加一个 name 属性,并赋值
Ext.apply(Ext.OA.Person.prototype, {
name : “李四"
});
var _person = new Ext.OA.Person();// 实例化 自定义类
alert(_person.name);
_person.name = "张三";// 修改类name属性
alert(_person.name);
</script>
3:支持类实例方法
Ext.namespace(“Ext.OA”); // 自定义一个命名空间
Ext.OA.Person = Ext.emptyFn; // 在命名空间上自定义一个类
//
演示类实例方法
Ext.apply(Ext.OA.Person.prototype, {
name : “李四",
sex :
"男",
print :
function() {
alert(String.format("姓名:{0},性别:{1}",
this.name, this.sex));
}
});
var _person
= new Ext.OA.Person();// 实例化 自定义类
_person.print();
</script>
4:支持类静态方法
Ext.namespace(“Ext.OA”); // 自定义一个命名空间
Ext.OA.Person = Ext.emptyFn; // 在命名空间上自定义一个类
//
演示类实例方法
Ext.apply(Ext.OA.Person.prototype, {
name : “李四",
sex :
"男",
print :
function() {
alert(String.format("姓名:{0},性别:{1}",
this.name, this.sex));
}
});
// 演示 类静态方法
Ext.OA.Person.print =
function(_name, _sex) {
var _person
= new Ext.OA.Person();
_person.name =
_name;
_person.sex
= _sex;
_person.print(); // 此处调用类 实例方法,上面print是类 静态方法
};
Ext.OA.Person.print("张三", "女"); // 调用类 静态方法
</script>
5:支持构造方法
Ext.namespace("Ext.OA");
//自定义一个命名空间
//构造方法
Ext.OA.Person =
function(_cfg){
Ext.apply(this,_cfg);
};
//演示类实例方法
Ext.apply(Ext.OA.Person.prototype, {
print:function(){
alert(String.format("姓名:{0},性别:{1}",this.name,this.sex));
}
});
//演示 类静态方法
Ext.OA.Person.print =
function(_name,_sex){
var _person
= new Ext.OA.Person({name:_name,sex:_sex});
_person.print(); //此处调用类 实例方法,上面print是类 静态方法
};
Ext.OA.Person.print("张三","女"); //调用类 静态方法
</script>
6:支持类继承
Ext.namespace("Ext.OA"); // 自定义一个命名空间
//
*******************父类*********************
//
构造方法
Ext.OA.Person =
function(_cfg) {
Ext.apply(this, _cfg);
};
// 演示类实例方法
Ext.apply(Ext.OA.Person.prototype, {
job :
"无",
print :
function() {
alert(String.format("姓名:{0},性别:{1},角色:{2}", this.name,
this.sex,
this.job));
}
});
Ext.apply(this, _cfg);
};
Ext.extend(Ext.OA.Student, Ext.OA.Person, {
job :
"学生"
});
var _student
= new Ext.OA.Student({
name :
"张三",
sex :
"女"
});
_student.print(); // 调用 父类方法
7:支持命名空间别名
Ext.namespace("Ext.OA"); // 自定义一个命名空间
Wt
= Ext.OA; // 命名空间的别名
//
*******************父类*********************
//
构造方法
Wt.Person =
function(_cfg) {
Ext.apply(this, _cfg);
};
// 演示类实例方法
Ext.apply(Wt.Person.prototype, {
job :
"无",
print :
function() {
alert(String.format("姓名:{0},性别:{1},角色:{2}", this.name,
this.sex,
this.job));
}
});
// *******************子类1*********************
Wt.Student =
function(_cfg) {
Ext.apply(this, _cfg);
};
// 重写父类的 实例 方法
Ext.extend(Wt.Student, Ext.OA.Person, {
job :
"学生",
print :
function() {
alert(String.format("{0}是一位{1}{2}", this.name,
this.sex,
this.job));
}
});
var _student
= new Wt.Student({
name :
"张q三",
sex :
"女"
});
_student.print(); // 调用 父类方法
8:支持类别名
Ext.namespace("Ext.OA"); // 自定义一个命名空间
Wt
= Ext.OA; // 命名空间的别名
//
*******************父类*********************
//
构造方法
Wt.Person =
function(_cfg) {
Ext.apply(this, _cfg);
};
PN
= Wt.Person; // 类别名
//
演示类实例方法
Ext.apply(PN.prototype, {
job :
"无",
print :
function() {
alert(String.format("姓名:{0},性别:{1},角色:{2}", this.name,
this.sex,
this.job));
}
});
// *******************子类1*********************
Wt.Student =
function(_cfg) {
Ext.apply(this, _cfg);
};
ST = Wt.Student;
// 重写父类的 实例 方法
Ext.extend(ST, PN,
{
job :
"学生",
print :
function() {
alert(String.format("{0}是一位{1}{2}", this.name,
this.sex,
this.job));
}
});
var _student
= new ST({
name :
"张q三",
sex :
"女"
});
_student.print(); // 调用 父类方法
二:Extjs中的配置选项
在ExtJs中,初使化对象时,会大量使用config配置参数(config通常均为一个json对象
Student = function(name,age){
this.name = name;
this.age= age;
}
//测试
Ext.onReady(function(){
var student = new Student("李四",18);
var info=string.format("姓名:{0},性别:{1}",student.name,student.age)
alert(info);
});
如json作为参数传递,则改造如下:
Student = function(config){
this.name = config.name;
this.sex = config.sex;
}
//测试
var student = new Student({name:”fwy”,sex:”男”});
alert(“姓名:”+student.name+”,性别:”+student.sex);
Extjs中一种更好的做法:
Student = function(config){
Ext.apply(this,config);
}
//测试
var student = new Student({name:”fwy”,sex:”男”});
alert(“姓名:”+student.name+”,性别:”+student.sex);
Ext.apply(obj,config)与Ext.applyIf(obj,config)的区别
说明:apply会将config和obj参数的同名属性覆盖,并且将config的其他属性添加到obj中.而applyIf则不会覆盖。
三:Ext中自定义事件
Ext的各种事件登记方式
1、使用addListener/on方法登记
这是最常见的方法登记方式,可以在元素获取后或组件实例化后登记,也可以在类构造器中登记。
//第一种方式形如:
{ //如msgBox中
…
fn:function(){…},
scope:…
}
//第二种方式
2、多事件组合方式登记
//常见于面板为基类(panel)的组件事件注册
{
…
listners:{
‘collapse’:function(obj){
…
},
‘expand’:function(obj){
…
}
}
}
常用于工具栏按钮的事件注册
{
handler:function(){…},
scope:…
}
//如果在一个元素上添加多个事件处理器可以向以下这样一次性设定
e1.on(
{
‘click’:{fn:this.onClick,scop:this},
‘mouseover’:{fn:this.onMouseOver,scope:this},
‘mouseout’:{fn:this.onMouseOut,scope:this}
}
)
也可以用以下语法
e1.on{
‘click’:this.onClick,
‘mouseover’,this.onMouseOver,
‘mouseout’,this.onMouseOut,
scope:this
}
3、使用Ext.addBehaviors方法登记事件
如下所示
Ext.addBehaviors({
//为id为test的锚点元素添加click事件
‘#test a@click’:function(e,t){...},
//为多个元素增加click事件
‘#test1 a,div.someclass@click’:function(){…}
})
Ext.js入门(二)的更多相关文章
- Ext.js入门:Window对象与FormPanel(六)
一:Ext.Window类 二:Ext.Window类实例 三:Ext.FormPanel类 四:Ext.FormPanel类实例 1.类Ext.Window 包: Ext 定义的文件 Windo ...
- Ext.js入门:TreePanel(九)
一:最简单的树 二:通过TreeNode自定义静态树 三:用TreeLoader加载数据生成树 四:解决IE下非正常加载节点问题 五:使用TreeNodeUI 六:带有checkbox的树 七:编辑树 ...
- Ext.js入门:TabPanel组件(八)
一:TabPanel组件简介 二:简单代码示例 三:使用iframe作为tab的标签页内容 四:动态添加tabpanel的标签页 五:为tabpanel标签页添加右键菜单 方式一: <html ...
- Ext.js入门:常用组件与综合案例(七)
一:datefield简单示例 二:timefield简单示例 三:numberfield简单示例 四:FormPanel提交 datefield简单示例: <html xmlns=&quo ...
- Ext.js入门:面板(五)
一:Ext.Panel类简介 二:Ext.Panel类常用属性方法与事件 三:Ext.Panel实例运用 1.Ext.Panel类简介 类 Ext.Panel 包: Ext 定义的文件: ...
- Ext.js入门:模板(四)
1.Ext.DomHelper简介2.Template语法使用简介3.Template简单应用4.Template中使用转换函数5.使用模板的自定义接口6.XTemplate应用 一:Ext.DomH ...
- Ext.js入门
一:ExtJs简介: ExtJs通常简称为Ext,它是一个非常优秀的Ajax框架,用Javascript编写,它与后台技术无关,可以用来开发具有炫丽外观的富客户端应用.Ext所开发的多彩界面吸引了许多 ...
- node.js入门(二) 模块 事件驱动
模块化结构 node.js 使用了 CommonJS 定义的模块系统.不同的功能组件被划分成不同的模块.应用可以根据自己的需要来选择使用合适的模块.每个模块都会暴露一些公共的方法或属性.模块使用者直接 ...
- Ext JS 6学习文档–第1章–ExtJS入门指南
Ext JS 入门指南 前言 本来我是打算自己写一个系列的 ExtJS 6 学习笔记的,因为 ExtJS 6 目前的中文学习资料还很少.google 搜索资料时找到了一本国外牛人写的关于 ExtJS ...
随机推荐
- lucene教程【转】【补】
现实流程 lucene 相关jar包 第一个:Lucene-core-4.0.0.jar, 其中包括了常用的文档,索引,搜索,存储等相关核心代码. 第二个:Lucene-analyzers-commo ...
- Java编程思想 学习笔记11
十一.持有对象 通常,程序总是根据运行时才知道的某些条件去创建新对象.在此之前,不会知道所需对象的数量,甚至不知道确切的类型. Java实用库还提供了一套相当完整的容器类来解决这个问题,其中基本的类 ...
- storm-starter 例子学习
storm-starter 是 apache storm 针对初学者的一个用maven管理的项目示例.这篇文章记录storm-starter例子代码分析及执行. 参考:https://github.c ...
- dragula 一个 JavaScript 库,实现了网页上的拖放位置
如图,把上面红蓝色拖放到下面 使用方法比较简单,如下代码: <link href='dist/dragula.css' rel='stylesheet' type='text/css' /> ...
- HTML5的manifest 本地离线缓存
下面直接放测试代码: index.html <!DOCTYPE html> <html manifest="m.manifest"> <head> ...
- luogu P1600 天天爱跑步
传送门 1A此题暴祭 (下面记点\(x\)深度为\(de_x\),某个时间点记为\(w_x\)) 首先,每条路径是可以拆成往上和往下两条路径的 对于往上的路径,假设有个人往上跑,\(w_y\)在点\( ...
- mysql原理~二阶段提交
一 简介:今天咱们来聊聊 mysql 两阶段提交二 事务过程 perpare-commit 两个过程1 perpare阶段 redo日志 1.设置undo state=TRX_UNDO_P ...
- python中argparse模块用法实例详解
python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...
- freeRTOS中文实用教程3--中断管理之延迟中断处理
1.前言 嵌入式实时操作系统需要对整个系统环境产生的事件作出响应.可以采用中断方式也可以采用轮询方式来进行处理.如果采用中断方式,则希望ISR(中断服务例程)的处理时间越短越好. 注:必须说明的是,只 ...
- c# WinFo判断当前程序是否已经启动或存在的几种方式
第一种方式:利用Mutex互斥量实现同时只有一个进程实例在运行 static class Program { /// <summary> /// 应用程序的主入口点. /// </s ...