Extjs3.x:


ID:这就是所熟知的Ext.getCmp(“组件ID”),缺点是id重复导致出错。

ref:在EXTJS3中,所有的组件都会有一个ref属性,也就是reference的意思。这种方式是通过对组件的引用而得到组件对象。例如:ref:’mypanel’,但是这种方式的局限性在于,他只能查找不同层级之间的组件。也就是说A[a,b,c] C[d,e,f],这样的方式,使用ref非常方便,但如果是B[c,c,d]这样的方式,就会出现问题,因为在某一层级上,出项了两个相同的组件。

items.get(0):这种方式是通过首先获得组件中所有元素的数组,然后通过数组获得想要的组件对象,一般不会用到,因为非常不灵活,如果元素层级发生改变的话,将不能获取想要的组件,维护起来也非常困难。所以,这种方式,是用的最少的一种方式。

Extjs4.x:


在Extjs4.0中,依然可以沿用Extjs3.x中查找组件的方式,但是在Extjs4.0中,可以利用ComponentQuery,更方便找到对应组件。

1、 通过组件ID获取组件:"#组件ID”,如果通过这种方式,那么一定要记住在组件ID前添加#号。

  1. // 通过ID获得组件:#ID
  2. //   var items = Ext.ComponentQuery.query('#btn2',panel);
  // 通过ID获得组件:#ID
// var items = Ext.ComponentQuery.query('#btn2',panel);

2、 得到某一组件下所有的指定类型的组件:"panel>button”,这种方式是查找所有panel组件下的所有button组件。

  1. // 获得panel下的所有button,这个需要注意,button必须在panel下的第一层,如果中间跨层是找不到的,如:'viewport>button'是找不到button的,因为中间有一层panel
  2. //   var items = Ext.ComponentQuery.query('panel>button',panel);
  // 获得panel下的所有button,这个需要注意,button必须在panel下的第一层,如果中间跨层是找不到的,如:'viewport>button'是找不到button的,因为中间有一层panel
// var items = Ext.ComponentQuery.query('panel>button',panel);

3、 通过xtype:"treepanel”或".treepanel

  1. // 如果是多个类别,可以逗号隔开,如:'gridpanel,treepanel'
  2. var items = Ext.ComponentQuery.query('button',panel);
  	// 如果是多个类别,可以逗号隔开,如:'gridpanel,treepanel'
// var items = Ext.ComponentQuery.query('button',panel);

4、如果想获取所有button并且action为save的button,则可以使用"button[action=save] ",又或者获取所有panel,并且autoscroll属性为true的panel,则可以使用"panel[autoScroll=true]"

  1. // 通过组件的属性来查找
  2. //   var items = Ext.ComponentQuery.query('button[id=btn2]',panel);
  // 通过组件的属性来查找
// var items = Ext.ComponentQuery.query('button[id=btn2]',panel);

note:通过属性查找的时候中括号要紧挨着类名,如上据代码button和[id=btn1]之间不能有空格!

5、还有两种方式,是查找某一组件的子组件或上级组件,例如:

  1.   1、查找window下的form:win.down(“form”)
  2.   2、查找button的父组件window:button.up(“window”);
  1、查找window下的form:win.down(“form”)
  2、查找button的父组件window:button.up(“window”);

最明显的例子就是在extjs4.0使用MVC模式进行开发的时候,经常会在control控制中大量使用'viewport > panel',’edit button[action=save]’这类查找,当点击button进行数据保存的时候,会使用

  1. var win   = button.up('window'),
  2. form   = win.down('form'),
  3. record = form.getRecord(),
var win   = button.up('window'),
form = win.down('form'),
record = form.getRecord(),

这类型的查找进行数据更新。

最后,在extjs4.0 MVC模式中,经常会碰到

  1. refs:[
  2. {ref: 'menu',selector: 'tablepanel'},
  3. {ref: 'feedList', selector: 'feedlist'},
  4. {
  5. ref: 'feedWindow',
  6. selector: 'feedwindow',
  7. autoCreate: true,
  8. xtype: 'feedwindow'
  9. }
  10. ]
refs:[
{ref: 'menu',selector: 'tablepanel'},
{ref: 'feedList', selector: 'feedlist'},
{
ref: 'feedWindow',
selector: 'feedwindow',
autoCreate: true,
xtype: 'feedwindow'
}
]

这样的书写方式。有很多人问我这是什么意思,查API也找不到。网络上也找不到,其实看extjs3.x中查找组件的方式,就会明白了。Refs是一个查找并匹配组件的集合,集合里面则指定了需要的操作,即查找一个组件,而找到的这个组件所匹配组件就是selector指定的,用上面代码一条

{ref: 'menu',selector: 'tablepanel'}

来稍做解释,即查找menu组件(其实是一颗树),点击树节点,结果将在'tablepanel'中渲染。这样解释可能比较含糊,那么就用官方例子做个解释吧。

{ref: 'feedData', selector: 'feedlist dataview'}。

这条的含义是查找'feedData',将'feedData'渲染在'feedlist的子组件dataview'上。

总结下:在ExtJS4中所有的组件都有一个query方法,这个方法就是ComponentQuery的实现。当然,如果还是不明白的话,就可以使用:

Ext.ComponentQuery.query("tabpanel");

Ext.ComponentQuery.query("#mytree");

实在extjs4.0实际使用过程中,如果要调用或查找组件,exjts会自动调用ComponentQuery的query方法来查找对应组件。

例子:

init:function(){

this.control({

'smsmenu': {//这里不必写全部的代码Ext.ComponentQuery.query(…);

itemmousedown: this.loadMenu

}

})

}

ExtJs4学习(三)组件查找 ComponentQuery类的更多相关文章

  1. Vue学习笔记-Vue.js-2.X 学习(三)===>组件化高级

    (四) 组件化高级 1.插槽(slot)的基本使用 A:基本使用: <slot></slot> B:默认置:<slot><h1>中间可以放默认值< ...

  2. stenciljs 学习三 组件生命周期

    stenciljs 组件包含好多生命周期方法, will did load update unload 实现生命周期的方法比价简单类似 componentWillLoad ....,使用typescr ...

  3. kuma 学习三 组件说明

    当前官方已经提供了两种可选的运行模式 通用模式 kubernetes 模式 kuma 组件说明 kuma-cp kuma 的控制面板 kuma-dp kuma 的数据面板 enovy 提供sideca ...

  4. DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  5. day91 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  6. day 89 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  7. ExtJs4学习(五)最基本的Ext类

    Ext类是ExtJs中最常见.最基础的一个类,它是一个全局对象,封装了所有类.单例和 Sencha 库所提供的实用方法. 大多数用户界面组件在一个较低的层次嵌套在命名空间中, 但是提供的许多常见的实用 ...

  8. day 83 Vue学习三之vue组件

    本节目录 一 什么是组件 二 v-model双向数据绑定 三 组件基础 四 父子组件传值 五 平行组件传值 六 xxx 七 xxx 八 xxx 一 什么是组件 首先给大家介绍一下组件(componen ...

  9. Protocol Buffer学习教程之编译器与类文件(三)

    Protocol Buffer学习教程之编译器与类文件(三) 1. 概述 在前面两篇中,介绍了Protobuf的基本概念.应用场景.与protobuf的语法等.在此篇中将介绍如何自己编译protobu ...

随机推荐

  1. 11.3 free:查看系统内存信息

    free命令用于显示系统内存状态,具体包括系统物理内存.虚拟内存.共享内存和系统缓存等. free命令的参数选项及说明 -b    以Byte为单位显示内存的使用情况 -m    以MB为单位显示内存 ...

  2. 常用深度学习框——Caffe/ TensorFlow / Keras/ PyTorch/MXNet

    常用深度学习框--Caffe/ TensorFlow / Keras/ PyTorch/MXNet 一.概述 近几年来,深度学习的研究和应用的热潮持续高涨,各种开源深度学习框架层出不穷,包括Tenso ...

  3. 为已有数据的DataTable添加一个自增列

    /// <summary> /// 为dt表增加一个自增的ID字段 /// </summary> /// <param name="dt">用户 ...

  4. 从“信息化”到“智慧化”,GVS视声将如何赋能智慧医院?

    4月23日-25日,2021年中华医院信息网络大会(CHINC)盛大举办,今年首次携手中国医院建筑与装备创新发展大会,同期同地亮相杭州国际博览中心,塑造了全新的"双引擎"品牌盛会. ...

  5. httprunner_安装及利用脚手架工具快速创建项目

    一.安装httprunner 笔者自己安装的版本为2.5.7 安装命令: pip  install httprunner==2.5.7 二.快速创建目录 hrun --startproject dem ...

  6. halcon——缺陷检测常用方法总结(模板匹配(定位)+差分)

    引言 机器视觉中缺陷检测分为一下几种: blob分析+特征 模板匹配(定位)+差分 光度立体:halcon--缺陷检测常用方法总结(光度立体) - 唯有自己强大 - 博客园 (cnblogs.com) ...

  7. 八、Nginx的TCP/UDP调度器

    nginx 1.9后才可以调用其他应用 1.9前只能调用web 部署nginx服务器----配置----起服务.验证 部署nginx服务器: [root@proxy ~]# yum –y instal ...

  8. OpenCV开发实战1——抖音哈哈镜效果

    前言 在抖音中,我们经常看到各种抖音玩家都喜欢使用哈哈镜效果.那么什么是哈哈镜呢? 在现实生活中,哈哈镜是指一种表面凹凸不平的镜子,可以反应出人像及物体的扭曲面貌.简单点来说就是拉伸人脸(物件),或者 ...

  9. You Only Look One-level Feature

    你只需要看一个层次的特征 摘要:本文回顾了单阶段检测器的特征金字塔网络(FPN),指出FPN的成功在于其对目标检测优化问题的分治解决,而不是多尺度特征融合.从优化的角度来看,我们引入了一种替代的方法来 ...

  10. Kafka 的这些原理你懂吗

    如果只是为了开发 Kafka 应用程序,或者只是在生产环境使用 Kafka,那么了解 Kafka 的内部工作原理不是必须的.不过,了解 Kafka 的内部工作原理有助于理解 Kafka 的行为,也利用 ...