ext的oop

本文介绍了如何使用Ext.js库创建JavaScript对象,包括使用Ext.emptyFn创建基本对象,通过Ext.apply给对象原型添加属性,实现类的继承与实例方法的定义。同时展示了如何在类中实现方法并进行实例化调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Ext创建一个js对象。

charset = 'utf-8';
Ext.namespace("general.athena.model");

general.athena.model.Person = Ext.emptyFn;
Ext.apply(general.athena.model.Person.prototype, {
//在prototype里面定义了的属性,是js对象的实例属性(和对象)
//如果直接使用Person.print 那么这个属性就是一个静态的方法
name : "",
sex : "",
job : "无",
print : function() {
/*
* Ext.MessageBox.alert("print", String.format("姓名:{0},性别:{1}",
* this.name, this.sex));
*/
alert(String.format("姓名:{0},性别:{1},工作:{2}", this.name, this.sex,this.job));
}
});

这里使用Ext.emptyFn来创建一个js的Person对象,在使用Ext.apply()函数来给Person的prototype,这些属性(方法)是Person的实例属性。

Ext的OOP的构造函数和静态方法

//Ext 的构造方法
general.athena.model.Person1 = function(cfg){
Ext.apply(this,cfg);
};

general.athena.model.Person1.print = function(name,sex){
// var person = new general.athena.model.Person1({name:name,sex:sex});
// person.print();
alert("静态方法");
};

Ext.apply(general.athena.model.Person1.prototype,{
print:function(){
alert(String.format("姓名:{0},性别:{1}",this.name,this.sex));
}
});


ExtOOP的继承

charset = 'utf-8';
Ext.namespace('general.athena.model');

// 构造函数
general.athena.model.Student = function(cfg) {
Ext.apply(this, cfg);
};

Ext.extend(general.athena.model.Student, general.athena.model.Person, {
job : '学生'
});

上面的Student类是继承了Person类,那么他就有Person类的print实例方法。
测试方法

var person = new general.athena.model.Person();
person.name = "XXX";
person.sex = "男";
person.print();

person.name = "天上人间";
person.sex = "不难不女";
person.print();

general.athena.model.Person1.print();
var person1 = new general.athena.model.Person1({
name : "XXX",
sex : "男"
});
person1.print();

var student = new general.athena.model.Student({
name : 'XXX',
sex : '男'
});
student.print();


自定义Ext类。

LoginWindow = Ext.extend(Ext.Window, {
id:'loginWindow',
title : '登录系统',
width : 265,
height : 140,
collapsible : true,
draggable : false,
resizable : false,
plain:true,
defaults : {
border : false
},
buttonAlign : 'center',
createFormPanel : function() {
return new Ext.form.FormPanel({
bodyStyle : 'padding-top:6px',
defaultType : 'textfield',
labelAlign : 'right',
labelWidth : 55,
labelPad : 0,
frame : true,
defaults : {
allowBlank : false,
width : 158
},
items : [ {
cls : 'user',
name : 'userName',
fieldLabel : '帐号',
blankText : '帐号不能为空'
}, {
cls : 'key',
name : 'password',
fieldLabel : '密码',
blankText : '密码不能为空',
inputType : 'password'

} ]
});
},
login : function() {
if (this.fp.form.isValid()) {
this.fp.form.submit({
waitTitle : '请稍候',
waitMsg : '正在登录......',
url : 'user/login!doLogin',
success : function(form, action) {
window.location.href = 'main.jsp';
},
failure : function(form, action) {
form.reset();
Ext.Msg.alert('警告', action.result.data);
}
});
}
},
keys : new Ext.KeyMap(this, {
key : 13,
fn : function() {
if (Ext.getCmp('loginWindow').fp.form.isValid()) {
Ext.getCmp('loginWindow').fp.form.submit({
waitTitle : '请稍候',
waitMsg : '正在登录......',
url : 'user/login!doLogin',
success : function(form, action) {
window.location.href = 'main.jsp';
},
failure : function(form, action) {
form.reset();
Ext.Msg.alert('警告', action.result.data);
}
});
}
},
scope : this
}),
initComponent : function() {
LoginWindow.superclass.initComponent.call(this);
this.fp = this.createFormPanel();
this.add(this.fp);
this.addButton('登录', this.login, this);
this.addButton('重置', function() {
this.fp.form.reset();
}, this);
}
});


上面的代码是网上的例子,我改了一点点地方,发现一个问题这里记录一下。

[img]http://dl.iteye.com/upload/attachment/491594/a21a33fa-6629-3bae-9cb5-b6df9139a4a2.jpg[/img]
上图中的Ext.getCmp('loginWindow')是我自己添加的。第一次添加的是Ext.get('loginWindow')。结果是错误的。我猜原因是这样的,给自定义对象添加的任何属性都属于Compnent的属性,而非Element的属性。所以在不到。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值