Javascript - ExtJs - 类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript - ExtJs - 类相关的知识,希望对你有一定的参考价值。
类(ExtJs Class)
preparation!
我用的是ext-4.2,解压后会得到以下文件
学习要用到的文件很少,现在保留以下文件和整个文件夹,然后删除其它文件并保持目录结构。本页面底部有提供基础包的下载。
在aspx页面中引入必要的Extjs文件,ext-all-dev.js作为调试使用,否则可替换为ext-all.js。
<script src="~/Extjs/extjs-42/ext-all-dev.js"></script>
<script src="~/Extjs/extjs-42/ext-lang-zh_CN.js"></script>
测试一下程序是否能跑起来:
Ext.MessageBox.alert("提示","hello");
});
应用海王星主题皮肤
先确保resources下的主题包ext-theme-neptune在你的程序结构目录中
打开Extjs4.2的resources/css/ext-all.css文件,用以下代码替换源代码。
动态切换主题
Ext.util.CSS.swapStyleSheet("theme", "scripts/Extjs4.2/resources/ext-theme-gray/ext-theme-gray-all.css");
});
文档载入事件
通常你的Ext代码都需要放进文档载入事件里。
});
Ext类
这是一个我们经常打交道的类,食一个全局单例对象,它封装了Ext组件和常用的Js操作
//初始化你的ExtJs应用程序,参看:
define(className, json, callBack)
//用于创建自定义类 、可以在自定义类的内部继承某个父类、重写其它类
//json:该对象用于定义对象的成员,可使用extend(派生)、config(将成员定义在这个匿名对象中)、constructor(构造器)、override(重写)、singleton(单例)等属性用于设置类
//自定义的类应遵守ExtJs的默认的创建类及其命名空间的规则
//比如你的ExtJ应用程序名为MyApp,你在MyApp - MyExt目录定义了一个Animal类,那么此类的完全限定名就是根据路径来定义的:路径是myApp\\myExt\\animal.js,
//类名的完全限定名就是MyApp.myExt.Animal
//=======创建自定义类=======
Ext.define("Employee", {
name: null,//name属性是Animal自身的原生成员
sayHello: function () { alert("hello") },//sayHello方法自动注册在Animal原型上
constructor: function (name) {
this.name = name;
}
},
function callBack() {
alert("", "对象创建完成");
});
var employee = new Employee("sam");
Ext.Msg.alert("", employee.name);
//等同于
Ext.define("Employee", {
config: {
name: null, //name属性是Animal自身的原生成员
sayHello: function () { alert("hello") } //sayHello方法自动注册在Animal原型上
},
constructor: function (name) {
this.name = name;
}
});
alert(employee.hasOwnProperty("sayHello")); //false
alert(employee.hasOwnProperty("name")); //true
extend(target, json);
//从指定类派生
var Animal = Ext.define("Animal", {
sayHello: function () { alert("helllo"); }
});
var Employee = Ext.extend(Animal, {
jobName: null
});
//等同于:
Ext.define("Animal", {
sayHello: function () {
alert("hello");
}
});
Ext.define("Employee", {
extend: "Animal",
jobName: null
});
Create(className,json)
//推荐使用Create方法创建对象,因为它会自动加载需要的类文件,如果使用new操作符则不会
var animal = new Animal("leo");
//或
var animal = Ext.create("Animal", { name: "leo" });
override(target, json)
//重写某个类
Ext.define("Animal", {
name: null,
constructor: function (name) {
this.name = name;
}
});
var animal = new Animal();
Ext.override(animal, {
sayHello: function () { //重写
alert("hello world");
},
sayHello2: function () { //追加
alert("new function");
}
});
//等同于
Ext.define("Animal", {
sayHello: function () {
alert("hello");
}
});
Ext.define("AnimalExtention", {
override: "Animal",
sayHello: function () {
alert("hello world");
},
sayHello2: function () {
alert("new function");
}
});
widget(aliasName, json)
//快速创建Ext组件
Ext.define(\'Ext.panel.Panel\', {
extend: \'Ext.container.Container\',
alias: \'widget.p\' //alias:设置Panel类的别名为p,即Panel的xtype为p
});
Ext.widget(\'p\', { //不使用Ext.Create方法,快速创建组件实例
renderTo: Ext.getBody(),
title: \'Panel\'
});
getClass(obj)
//如果参数对象是通过Ext.define创建的,返回该对象的类型,否则返回null类似的有getClassName
var employee = new Employee("korn", "35");
var cl = Ext.getClassName(employee);
alert(cl); // print Employee
require(configArray)
//异步加载Ext组件,如果当前页面只需要用到某几个组件时
//使用此方法就可以只加载指定的组件而不需要全部加载,这样就提高了加载效率
//在Ext.OnReady()之外写:
Ext.require([
\'Ext.tab.*\', //*号表示当前命名空间下的所有类
\'Ext.window.*\',
\'Ext.data.Connection\',
\'Ext.layout.container.Border\'
]);
Ext.exclude(\'Ext.data.*\').require(\'*\'); //加载所有的Ext的类,但排除Ext.data命名空间下的类
Base
//返回一个Ext基类,默认所有Ext类都是从此类派生
访问父类的成员
sayHello: function () {
alert("hello");
},
sayHello2: function () {
alert("hello2");
}
});
var Employee = Ext.define("Employee", {
extend: "Animal",
sayHello: function () {
Employee.superclass.sayHello(); //调用父类的任意某个方法
},
sayHello2: function () {
this.callParent(); //调用父类的与当前类的方法同名的方法
},
});
var employee = new Employee();
employee.sayHello();
employee.sayHello2();
为类定义别名
extend: \'Ext.container.Container\',
alias: \'widget.p\'//Panel类的别名为p
});
get、set访问器
使用Ext的define方法创建的类会获得Ext原型对象上定义的get、set访问器,用于获取(get)和设置(set)对象的属性或方法。如果要使用get、set访问器,则必须将成员定义在config匿名对象中,否则无效。ExtJs组件的属性都可以通过get("property")、set("property","newValue")进行读取或修改。
config: {
name: "sam",
age: 32,
sayHello:function() {alert("hello");}
}
});
var a = new Animal();
alert(a.getName()); //获取name
alert(a.getAge()); //获取age
alert(a.getSayHello()); //获取方法
a.setName("leo"); //设置name
a.setAge(35); //设置age
a.setSayHello(function () {//设置sayHello
alert("hello world");
});
对象继承
与类派生(Extend)类似,对象继承使用Ext.apply方法,X对象要从Y对象继承实际上是直接将Y对象的成员完全copy给X,如果X已经有与Y同名的成员,则会发生新覆盖旧。如果不想覆盖,可使用Ext.applyIf。Ext.applyIf只将X没有的成员复制给它。
var obj2 = { name: "sam" }
Ext.apply(obj2, obj);
alert(obj2.gender);
类多重派生
利用minxins混入可解决类只能派生自一个类,mixins是将多个类的原型上的所有成员copy给需要多重继承的类。
name:"sam"
});
Ext.