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 Jungle Cancel reply