[Extjs]Extjs4中up()和down()的用法以及组件查找_ComponentQuery类

原创 2013年09月11日 14:54:16

Extjs4中up()和down()的用法

Extjs4.x中,新增加了两个方法up()和down()方法。这两个方法都是用来获取组件的,下面我们来看下官方解释。

up( String selector, [Number/Mixed maxDepth] ) : Ext.core.Element

selector:必选,字符串形式,表示要匹配的组件。

Maxdepth:可选,表示要匹配的最大深度。

up方法的API解释为:通过简单的选择,获得相匹配的dom,使用up方法总是返回一个Ext.core.Element,也就是ext的组件。

down( String selector, [Boolean returnDom] ) : HTMLElement/Ext.core.Element

selector:必选,字符串形式,表示要匹配的组件,

returnDom:可选,布尔类型,如果为true,则返回DOM节点,而不是Ext.core.Element。值默认为false。

down方法的API解释,通过选择器,来获得任何深度的子组件,在down方法中,不应该包含组件的id,而应该是组件的xtype。

下面我们来看他的用法。先看一段代码。

    Ext.require('Ext.*');
     Ext.onReady(function(){
      var win = Ext.create('Ext.window.Window',{
       height: 160,
       width: 280,
       title: '用户登陆',
       closeAction: 'hide',
       closable : false, 
       iconCls: 'win',
       layout: 'fit',
       modal : true, 
       plain : true,
       resizable: false,
       items:[{
        xtype:'form',
        items:[{
         //..... 
        }],
        button:[{
         text:'登录',
         handler:function(){
          
         }
        }]
       }]
      }) 
     });

这段代码中,我们创建了一个window,然后在window中添加了一个form。最后增加了一个button。button的handler,我们定义了一个function。下一步,我们在这个function中添加代码。

    var form = this.up(‘form’).getForm();

这里用到了this.up。具体解释下。这里this。就是button组件,up(‘form’)是指匹配form组件。那么合起来,我们就得到了form组件,并且得到整个form。

在这个例子中,我们并不需要down方法。因为无论是获取form还是window.我们都可以使用this.up(‘form’)或this.up(‘window’)来获取form组件和window组件。

为了介绍下down方法。我们将整个过程复杂化一些。

    var form = this.up(‘window’).down(‘form’).getForm();

相信大家已经很明白了,this.up(‘window’)获取了顶级的window组件。接着使用down()方法获取了window的子组件form组件,最后使用getForm()来获取整个form。


组件查找_ComponentQuery类

Extjs4.0组件查找使用了ComponentQuery类,使用这个类能更加方便地查找容器内的组件。实现方式类似于CSS的Selector。
下面将extjs3和extjs4各种查找组件的方式做下简介。
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前添加#号。

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

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

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

    3、 通过xtype:"treepanel”或".treepanel
     // 如果是多个类别,可以逗号隔开,如:'gridpanel,treepanel'  
            var items = Ext.ComponentQuery.query('button',panel);  
    4、如果想获取所有button并且action为save的button,则可以使用"button[action=save] ",又或者获取所有panel,并且autoscroll属性为true的panel,则可以使用"panel[autoScroll=true]"
           // 通过组件的属性来查找  
            //   var items = Ext.ComponentQuery.query('button[id=btn2]',panel);  
        note:通过属性查找的时候中括号要紧挨着类名,如上据代码button和[id=btn1]之间不能有空格!

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

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

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

    最后,在extjs4.0 MVC模式中,经常会碰到
            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

                }

            })

        }




相关文章推荐

Extjs获取组件的方法

分类: EXTJS4 EXTJS4发布有一段时间了,最近也一直在关注EXTJS4中的一些新的知识点,本节咱们一起来看一下ExtJS4中的ComponentQuery类,这个类...

Extjs4中up()和down()的用法以及组件查找_ComponentQuery类

Extjs4中up()和down()的用法 Extjs4.x中,新增加了两个方法up()和down()方法。这两个方法都是用来获取组件的,下面我们来看下官方解释。 up( Stri...
  • cswhale
  • cswhale
  • 2014年01月17日 12:51
  • 11043

ExtJs--05--给window组件添加功能条以及子组件获取上级或下级组件的属性和方法

ExtJs--05--给window组件添加功能条以及子组件获取上级或下级组件的属性和方法...

[ExtJS5学习笔记]第三十五节 sencha extjs 5 组件查询方法总结

一个UI前台组件肯定会比较多,我们通常习惯性的使用ID来获取需要操作的组件,但是这种方法是extjs推荐的么?有没有extjs推荐使用的获取组件的方法呢?目录目录 extjs的查询组件的API 查询实...

【Ext JS 4】组件查找_ComponentQuery类

本文整理自‘资源’一节中引用的文章 Extjs4.0组件查找使用了ComponentQuery类,使用这个类能更加方便地查找容器内的组件。实现方式类似于CSS的Selector。 下面将ext...
  • yanwushu
  • yanwushu
  • 2012年12月25日 19:18
  • 11737

Extjs 组件查找

1. 全局查找方式 2. 容器内查找 3. form查找子组件 4. 通用组件查找方式1、全局查找方式...

Extjs4中up()和down()的用法以及组件查找_ComponentQuery类

Extjs4中up()和down()的用法 Extjs4.x中,新增加了两个方法up()和down()方法。这两个方法都是用来获取组件的,下面我们来看下官方解释。 up( Stri...

ExtJs4学习(三)组件查找 ComponentQuery类

Extjs3.x: ID:这就是所熟知的Ext.getCmp(“组件ID”),缺点是id重复导致出错。 ref:在EXTJS3中,所有的组件都会有一个ref属性,也就是reference的意...

Extjs4 中up()和down()的用法

Extjs4.x中,每个组件都新增加了两个方法up()和down()方法。这两个方法都是用来获取组件的,下面我们来看下up()方法和down()方法的官方解释。 Extjs4.x中,新增加了...

Extjs4中up()和down()的用法

Extjs4.x中,每个组件都新增加了两个方法up()和down()方法。这两个方法都是用来获取组件的,下面我们来看下up()方法和down()方法的官方解释。 Extjs4.x中,新增加了两个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Extjs]Extjs4中up()和down()的用法以及组件查找_ComponentQuery类
举报原因:
原因补充:

(最多只允许输入30个字)