By Alex
/ in
var myDiv1 = Ext.get( 'div1' ); //根据ID获取DOM元素
myDiv1.createChild( 'Child from a string' ); //创建要给子节点
myDiv1.createChild( '<div>Element from a string</div>' ); //创建一个子元素
myDiv1.createChild( { //使用对象配置方式添加子元素
tag : 'div',
html : 'Child from a config object'
} );
//添加多个子代元素
myDiv1.createChild( {
tag : 'div',
id : 'nestedDiv',
style : 'border: 1px dashed; padding: 5px;',
children : {
tag : 'div',
html : '...a nested div',
style : 'color: #EE0000; border: 1px solid'
}
} );
//在最前面插入子元素
myDiv1.insertFirst( {
tag : 'div',
html : 'Child inserted as node 0 of myDiv1'
} );
//在某个子元素之前插入
myDiv1.createChild( {
tag : 'div',
id : 'removeMeLater',
html : 'Child inserted as node 2 of myDiv1'
}, myDiv1.dom.childNodes[3] );
//删除一个元素
var myDiv1 = Ext.get( 'div1' );
myDiv1.remove();
var me = currentBorderContainer;
//根据Region在border布局中导航
var northChild = me.down( '*[region=north]' );
//遍历所有子组件
Ext.each( me.items.items, function( cmp ) {});
使用模板可以很方便的创建复杂的DOM结构。模板中的占位符使用花括号{}包围,可以应用一个上下文对象以替换模板生成最终结果。
XTemplate支持循环、选择等基础程序结构,支持任意表达式的计算。可用于表达式的内置变量包括:
位于{[...]}中的代码以当前模板为this执行,其结果插入到模板填充结果中。
位于{%...%}中的代码以当前模板为this执行,其结果不插入到模板填充结果中。
下面是模板用法示例:
//简单的模板用法
var myTpl = Ext.create('Ext.Template' , "<div>Hello {0}.</div>");
myTpl.append(document.body, ['Marjan']); //替换模板并作为body的子元素
myTpl.append(document.body, ['Michael']);
myTpl.append(document.body, ['Sebastian']);
var myTpl = Ext.create('Ext.Template', [
'<div style="background-color: {color}; margin: 10px;">',
'<b> Name :</b> {name}<br />',
'<b> Age :</b> {age}<br />',
'<b> DOB :</b> {dob}<br />',
'</div>'
]);
myTpl.compile(); //编译模板可以获取更快的速度
//使用多个变量替换占位符,并作为body的子元素
myTpl.append( document.body, {
color : "#E9E9FF",
name : 'John Smith',
age : 20,
dob : '10/20/89'
} );
myTpl.append( document.body, {
color : "#FFE9E9",
name : 'Naomi White',
age : 25,
dob : '03/17/84'
} );
var tplData = [
{
color : "#FFE9E9",
name : 'Naomi White',
age : 25,
dob : '03/17/84',
cars : [
'Jetta', 'Camry', 'S2000'
]
}, {
color : "#E9E9FF",
name : 'John Smith',
age : 20,
dob : '10/20/89',
cars : [
'Civic', 'Accord', 'Camry'
]
}
];
//XTemplate使用在循环场景使用:
var myTpl = Ext.create( 'Ext.XTemplate', [
//数组形式的多个字符串
'<tpl for=".">', //点号表示遍历的变量是上下文本身
'<div style="background-color: {color}; margin: 10px;">',
'<b> Name :</b> {name}<br />',
'<b> Age :</b> {age}<br />',
'<b> DOB :</b> {dob}<br />',
'</div>',
'</tpl>'
] );
myTpl.compile();
myTpl.append( document.body, tplData ); //添加多个DIV
//复杂的例子:
var myTpl = Ext.create( 'Ext.XTemplate', [
'<tpl for=".">', //对数据中每个元素进行遍历
'<div style="background-color: {color}; margin: 10px;">',
'<b> Name :</b> {name}<br />',
'<b> Age :</b> {age}<br />',
'<b> DOB :</b> {dob}<br />',
'<b> Cars : </b>',
'<tpl for="cars">', //对每个元素的cars属性进行遍历
'{.}',
'<tpl if="this.isCamry(values)">', //条件语句:表达式不要花括号
'<b> (same car)</b>',
'</tpl>',
'{[ (xindex < xcount) ? ", " : "" ]}', //需要花括号:xindex为从1开始的当前循环索引,xcount为总数
'</tpl>',
'<br />',
'</div>',
'</tpl>',
{
//模板配置项
disableFormats: true,
//模板成员函数定义
isCamry : function( car )
{
return car === 'Camry';
}
}
] );
myTpl.compile();
myTpl.append( document.body, tplData );
ExtJS支持针对任何元素的键盘导航:
me.keyNav = new Ext.util.KeyNav( {
target: me.getEl(), // 目标元素
up: function ( e ) {
me.doSomething();
},
down: function ( e ) {
me..doSomething();
},
enter: me..doSomething,
esc: {
fn: me..doSomething,
defaultEventAction: false
},
scope: me
} );
注意:
me.getEl().set( { 'tabindex': 1 } )
这个特性在Chrome测试过
| 属性/方法 | 说明 |
| chromeVersion firefoxVersion isChrome isIE6 |
不一一列举,这些方法用于判断浏览器类型、版本,操作系统的类型 |
| emptyFn | 可重用的空函数 |
| emptyString | 可重用的空字符串 |
| addBehaviors() | 在domready之后,为CSS选择器匹配的元素添加事件监听器:
Ext.addBehaviors( {
//为id=foo的元素内部的所有a元素添加click事件监听
'#foo a@click' : function( e, t )
{},
//为多个CSS选择器添加mouseover事件
'#foo a, #bar span.some-class@mouseover' : function()
{}
} );
|
| application() | 加载 Ext.app.Application并启动基于MVC的ExtJS应用 |
| apply(o, c) | 递归的拷贝c对象的所有属性到o |
| applyIf(o, c) | 如果o不存在某个属性,则拷贝之 |
| batchLayouts() | 执行某个函数,并在完成前暂停布局 |
| bind() | 绑定参数、作用域(this)以形成一个新函数:
function multiply( num1, num2 )
{
console.log( num1 * num2 );
}
/**
* Function fn 被绑定的函数
* [Object scope] this的指向
* [Array args] 覆写、插入调用原始函数的参数数组
* [Boolean/Number appendArgs]
* 如果为true,则是在尾部附加而非覆写参数;数字表示插入的索引
*/
var multiply100 = Ext.bind( multiply, this, [
100
], 0 );
multiply100( 8 );
var multiply100_8 = Ext.bind( multiply, this, [
100, 8
] );
multiply100_8();
|
| callback() | 在指定的延迟后,执行回调函数 |
| defer() | 在指定的延迟后,执行函数 |
| clone() | 克隆基本类型、 数组、{}形式的简单对象、DOM节点、日期 |
| copyTo() | 把指定的一组属性拷贝到目标对象:
this.initialBox = Ext.copyTo({}, this.initialConfig, 'x,y,width,height');
|
| create() | 通过类名、别名或者备选类名实例化类 |
| createByAlias() | 等价于Ext.ClassManager.instantiateByAlias() |
| decode() | 解码JSON字符串为JavaScript对象,等价于 Ext.JSON.decode() |
| define() | 定义或者覆写一个类 |
| destroy() | 尝试销毁传递进来的对象数组,例如移除监听器、移除DOM节点、调用destroy()函数、 |
| destroyMembers() | 销毁对象的指定属性 |
| each() | 便利集合并对每一个元素执行函数:
var countries = [
'Vietnam', 'Singapore', 'United States', 'Russia'
];
Ext.Array.each( countries, function( name, index, countriesItSelf )
{
console.log( name );
} );
|
| encode() | 把JavaScript对象编码为JSON字符串 |
| exclude() | 显式排除加载一个ExtJS类 |
| fly() | 享元一个HTML元素对象为Ext.Element |
| get() | 类似于fly(),不享元 |
| getBody() | 获取body元素为Ext.Element |
| getClass() | 获取某个对象的ExtJS类 |
| getClassName() | 得到某个对象的ExtJS类名称 |
| getCmp() | 根据ID获取组件 |
| getDoc() | 获取document元素为Ext.Element |
| getDom() | 根据ID或者Element得到DOM元素 |
| getHead() | 获取head元素为Ext.Element |
| getOrientation() | 对于移动设备,得到方向 |
| getScrollbarSize() | 得到滚动条大小 |
| getStore() | 根据ID获取Store对象 |
| id() | 创建唯一的ID |
| is***() | 进行类型判断,包括数字、字符串、未定义、日期、可迭代、DOM节点等 |
| iterate() | 迭代对象的每一个元素 |
| log() | 记录日志 |
| merge() | 合并两个对象,递归的进行,不保留引用 |
| namespace() | 创建名字空间,等价于ns() |
| onDocumentReady() | 等价于 Ext.EventManager.onDocumentReady() |
| onReady() | 等价于Ext.Loader.onReady() |
| override() |
覆盖指定对象的成员:
举例: var panel = new Ext.Panel( {} );
Ext.override( panel, {
initComponent : function()
{
this.callParent();
}
} );
|
| pass(() | 传递前导的参数给函数,并创建新的函数
var originalFunction = function()
{
alert( Ext.Array.from( arguments ).join( ' ' ) );
};
var callback = Ext.Function.pass( originalFunction, [
'Hello', 'World'
] );
callback(); //显示:Hello World
callback( 'by Me' ); //显示:Hello World by Me
|
| query() | 根据CSS选择器查询DOM元素,等价于Ext.dom.Query.select() |
| select() | 根据CSS选择器查询Element元素,等价于Ext.Element.select() |
| removeNode() | 移除DOM节点 |
| require() | 等价于Ext.Loader.require() |
| syncRequire() | 同步化的require() |
| resumeLayouts() | 恢复布局功能 |
| suspendLayouts() | 暂停布局功能 |
| toArray() | 把可迭代对象转换为数组 |
| typeOf() |
返回对象的类型,支持: undefined |
| valueFrom() | 如果不Ext.isEmpty()则返回对象本身,否则返回默认值 |
| widget() | 根据xtype创建组件 |
Ext.Class类似于Java的java.lang.Class类,但是其只专注于如何生成类对象,关注于类的结构性特征。
| 配置项/属性/方法 | 说明 |
| {alias} | 别名列表,主要用于定义组件的xtype、ptype、ftype。必须添加针对*type的前缀:widget、plugin、feature |
| {alternateClassName} | 备选类名列表 |
| {config} | 该类包含的配置项、配置项的默认值。这些配置项自动生成getter/setter |
| {extend} | 父类的名称 |
| {inheritableStatics} | 可继承的静态方法列表 |
| {mixins} | 混入类的字典或者数组 |
| {requires} |
在创建该类之前必须加载的类列表 |
| {singleton} | 是否实例化为单例对象:
Ext.define( 'Logger', {
singleton : true,
log : function( msg )
{
console.log( msg );
}
} );
Logger.log( 'Hello' );
|
| {statics} | 静态成员字典 |
| {uses} | 可选的,与当前类一起加载的类。不是必须在创建当前类的时候就加载,但是必须在Ext.onReady()之前加载完毕 |
| new Ext.Class() | 创建一个匿名类 |
Ext.Base相当于Java的java.lang.Object,是所有类型的基类;其提供的静态方法则类似java.lang.Class的功能
| 配置项/属性/方法 | 说明 |
| self | 得到创建当前对象的ExtJS类对象(Ext.Class),与statics()不同,其具有多态性、作用域依赖(this)的特征 |
| callParent | 传入数组或者arguments,调用被覆盖的父类的当前方法,相对于Java的super.*** |
| getInitialConfig() | 得到创建当前对象时,传递给构造器的配置对象 |
| initConfig() | 为当前对象初始化配置, 典型用法:
constructor: function(config) {
this.initConfig(config);
}
|
| statics() | 得到创建当前对象的ExtJS类对象(Ext.Class),与self不同,不具有作用域依赖的特征(与this指针无关),总是返回调用该方法的方法所属的类 |
| 静态成员 | |
| addMembers() | 为当前类的原型添加方法或者属性 |
| addStatics() | 为当前类添加/覆盖静态成员或属性 |
| create() | 创建当前类的实例 |
| createAlias() | 为当前类的原型方法创建别名 |
| getName() | 得到当前类的字符串名称 |
Ext.define( 'Ext.ux.Container', {
extend : 'Ext.container.Container',
alias : 'widget.uxcontainer',
hideBar : true,
items : {},//不要在这里配置items的内容
initComponent : function(){
var me = this;
me.callParent(arguments);
//如果items的内容由当前容器类决定,则可以在调用ExtJS默认initComp方法后,初始化items
var items = {
xtype : 'container',
hidden : me.hideBar
};
me.add(items);
}
});
Leave a Reply to Archeb Cancel reply